🏠 Hermes + Home Assistant 智能中控部署方案
从零部署 · 7 步完成 · 语音控制 + 微信 AI
最后更新:2026-05-25
1. 全链路架构
1.1 设备分工
1.2 语音对话完整流程
| 方案 | STT | LLM | TTS | 总计 |
|---|---|---|---|---|
| ✅ 当前:v4-flash (opencode-go) | ~0.3s | ~0.8s | ~0.5s | ~1.6s |
Extended OpenAI Conversation 直接传 model 参数到 opencode-go,用 v4-flash 响应 ~0.8s。语音助手不需要深度推理。
1.3 内存预估
| 组件 | 运行位置 | 内存 | 说明 |
|---|---|---|---|
| HA Container | 服务器 Docker | ~350MB | 基础容器 |
| Piper TTS | 服务器 Docker | 🟡 ~150MB(可选) | 仅 HA 语音管道用,可停:docker compose stop wyoming-piper |
| Groq Whisper STT | 云端 API | 0 | HACS 集成,免费 28,800 音频秒/天 |
| openWakeWord | Echo Show 本地 | 0 | 设备端运行 |
| Spotify 集成 | HA 内置 | ~10MB | 30 秒轮询 |
| MCP Server | HA 内置 | ~10MB | 供 Hermes 调用 HA |
| View Assist | Echo Show + HA | ~20MB | 自动化模板 |
| 新增总计 | ~540MB | (不用本地 Whisper STT,省 200MB) | |
⚠️ 降级场景:如果 Groq 不可用,切换本地 small-int8:Docker +852MB 内存,服务器剩余 ~110MB(勉强够)。切 tiny-int8:+273MB 内存,服务器剩余 ~690MB。 | |||
| 服务器剩余 | ~960MB | 4GB 总量,已用 ~2.3GB,剩余 ~1.5GB。减 540MB ≈ 960MB 余量。 | |
1.4 月度成本估算
| 项目 | 用量预估 | 月费 |
|---|---|---|
| Groq Whisper STT | 每日 ~50 次指令 × 3s 音频 = 150s/天 | $0(免费额度 28,800s/天) |
| DeepSeek v4-flash (语音 LLM) | 每对话 ~3K tokens,日 50 次 = 150K tokens | ~$0.04($0.14/M input) |
| DeepSeek v4-pro (Hermes 微信) | 现有用量,不新增 | $0(已在账) |
| Spotify API | 免费 tier,无额外费用 | $0 |
| 合计新增 | ~$0.04/月 |
语音 LLM 用 v4-flash 几乎零成本。每天的对话量即便翻 10 倍,也才 $0.40/月。
2. 分步部署
下面从零开始,在宿主机上完成全部部署。
Step 1:创建目录和 Docker Compose 重要
# 创建数据目录
mkdir -p ~/ha-stack /opt/data/ha
# 创建 compose 文件(一键复制整段)
cat > ~/ha-stack/docker-compose.yaml << 'EOF'
services:
homeassistant:
container_name: homeassistant
image: ghcr.io/home-assistant/home-assistant:stable
volumes:
- /opt/data/ha:/config
- /etc/localtime:/etc/localtime:ro
restart: unless-stopped
privileged: true
network_mode: host
environment:
TZ: Asia/Hong_Kong
# ═══ 以下是可选的 Piper TTS(仅 HA 语音管道用)═══
# 如果不用 HA 语音管道(改用 Open-LLM-VTuber 等),
# 可以整段注释或删除,省 150MB 内存。
wyoming-piper:
container_name: wyoming-piper
image: lscr.io/linuxserver/piper:latest
restart: unless-stopped
network_mode: host
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Hong_Kong
- PIPER_VOICE=en_US-lessac-medium
- PIPER_LENGTH=1.0
EOF
不用 HA 内置的 OpenAI Conversation(它只支持官方 OpenAI API),改用 HACS 社区的 Extended OpenAI Conversation(⭐1.4k,32 位贡献者,活跃维护)。它在 UI 里直接提供 Base URL 字段,原生支持 opencode-go、DeepSeek 等任何 OpenAI 兼容 API——不需要任何环境变量 hack。
对比:
• 内置 OpenAI:只支持 api.openai.com ❌
• OpenRouter:可中转,但无自定义 Base URL ❌
• Extended OpenAI:UI 直接填 Base URL ✅ ← 我们的选择
具体安装见 Step 4。
deploy.resources 在普通模式下不生效(Swarm only)。内存限制建议用 Docker 自身 + 服务器监控来控制,不需要在 compose 里设。# 验证 compose 语法
docker compose -f ~/ha-stack/docker-compose.yaml config
Step 2:Nginx 反代 + Cloudflare DNS 跳过会炸
sudo ufw status verbose | grep 8123(应该无输出)。# 创建 Nginx 配置
sudo tee /etc/nginx/sites-available/ha << 'EOF'
server {
listen 80;
server_name ha.treetree.tech;
location / {
proxy_pass http://127.0.0.1:8123;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
EOF
sudo ln -sf /etc/nginx/sites-available/ha /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
然后去 Cloudflare DNS 添加 A 记录:ha → 168.144.35.51(橙色代理)。
curl -sI http://ha.treetree.tech 应返回 HTTP 200。configuration.yaml,否则请求可能被阻断或 IP 记录错误。这个文件要等 Step 3 启动 HA 后才会生成。启动完回到这里执行:
# 在宿主机编辑(用 sudo,文件在 /opt/data/ha/ 挂载目录)
sudo nano /opt/data/ha/configuration.yaml
# 在文件末尾添加以下内容:
# 加到 configuration.yaml 末尾(如果已有 http: 段则合并进去)
http:
use_x_forwarded_for: true
trusted_proxies:
- 127.0.0.1 # Nginx 在本机,从 127.0.0.1 转发请求
configuration.yaml 后需要重启 HA 才能生效:cd ~/ha-stack && docker compose restart homeassistant。注意:configuration.yaml 对 YAML 缩进敏感(2 空格),不要用 Tab。Step 3:启动容器 跳过会炸
cd ~/ha-stack && docker compose up -d
# 等待 2-3 分钟(首次启动 HA 需要初始化数据库),然后检查
docker compose ps
# 应看到 homeassistant 和 wyoming-piper 都是 Up
docker logs homeassistant | tail -20
# 看到 "Home Assistant initialized in X.XXs" 就绪
浏览器打开 https://ha.treetree.tech,按向导创建管理员账号。
https://ha.treetree.tech(Nginx 反代),不需要暴露 8123。https://ha.treetree.tech,应看到 HA 登录页。Step 4:安装 HACS + 集成 重要
4a. 安装 HACS
docker exec -it homeassistant bash 进容器,然后 wget -O - https://get.hacs.xyz | bash -。不要在宿主机执行。# 进入 HA 容器
docker exec -it homeassistant bash
# 在容器内运行安装脚本
wget -O - https://get.hacs.xyz | bash -
# 退出容器,重启 HA
exit
cd ~/ha-stack && docker compose restart homeassistant
HA 重启后,浏览器打开 https://ha.treetree.tech(⚠️ 不要带 :8123,你走的是 Nginx 反代):
- 设置 → 设备与服务 → 添加集成 → 搜 HACS → 安装
- 勾选所有条款 → 提交 → 弹出 GitHub 授权页 → 登录 → 授权
- 回到 HA → 完成。左侧菜单出现 HACS 入口。
怎么添加自定义仓库:左侧菜单点 HACS → 右上角三个点 ⋮ → 自定义存储库 → 粘贴仓库 URL → 类别选"集成" → 添加。之后就能在 HACS 里搜索该集成的名字并下载。
4b. Extended OpenAI Conversation
安装:
- HACS → 右上角三点 → 自定义仓库 → 粘贴
https://github.com/jekalmin/extended_openai_conversation→ 类别选「集成」→ 添加 - HACS 搜索 Extended OpenAI Conversation → 下载 → 重启 HA
配置(分两步):
① 添加集成:HA → 设置 → 设备与服务 → 添加集成 → Extended OpenAI Conversation
• API Key = 你的 OPENCODE_GO_API_KEY
• Base URL = https://opencode.ai/zen/go/v1
(⚠️ 这里没有 Model 字段——在下一步)
② 配置语音助手选项:HA → 设置 → 语音助手 → 编辑助手 → 选项
• Model = deepseek-v4-flash(默认是 gpt-5-mini,手动改掉)
• Max Tokens = 500(默认够用)
• 开启 Advanced Options → Temperature = 0.5
4c. OpenAI Whisper Cloud (Groq STT)
安装:
- HACS → 自定义仓库 → 添加
https://github.com/fabio-garavini/ha-openai-whisper-stt-api - HACS 搜索 OpenAI Whisper Cloud(97⭐)→ 下载 → 重启 HA
配置:
- 先去 console.groq.com/keys → 用 Google/GitHub 登录 → 创建 API Key → 复制
- HA → 设备与服务 → 添加集成 → 搜 GroqCloud(不是 OpenAI Whisper Cloud——注意区分)
- 填 API Key → 模型选
whisper-large-v3-turbo→ 提交 - Temperature 默认 0,Prompt 留空
🎤 STT 方案对比:
| 维度 | ✅ Groq Whisper(主力) | 本地 small-int8(降级) | 本地 tiny-int8(极限) |
|---|---|---|---|
| 费用 | $0 永久(免费 28,800s/天) | $0 永久 | $0 永久 |
| 需要注册 | ✅ Google/GitHub 登录 | ❌ 不需要 | ❌ 不需要 |
| 磁盘(模型文件) | 0(云端) | ~466 MiB | ~75 MiB |
| 内存 = RAM(运行时占用) | 0 | ~852 MB | ~273 MB |
| 延迟 | ~200-500ms | ~500ms | ~300ms |
| 多语言 WER(错误率) | ~3.5%(large-v3) | ~8-9%(quantized) | ~13-14%(quantized) |
| 中文支持 | ⭐⭐⭐⭐⭐ large-v3 | ⭐⭐⭐ 短指令可用 | ⭐⭐ 仅简短语境 |
| 隐私 | ⚠️ 音频上传云端 | ✅ 音频不出家门 | ✅ 音频不出家门 |
| 长期稳定性 | ✅ 免费层无时间限制(Groq 商业模式是卖芯片,API 是展示窗口) | ✅ 本地跑永远不下线 | ✅ 本地跑永远不下线 |
推荐策略:
• 主力:Groq Whisper($0、0 内存、延迟最低、准确率最高)
• 降级:本地
small-int8——Groq 挂了改 HA 语音管道指过去即可。870MB RAM 在你服务器余量(960MB)内刚好够用• 极省内存选
tiny-int8(273MB),但中文准确率明显下降,只适合极简指令4d. Model Context Protocol Server
安装:内置集成,不需要 HACS。
- HA → 设置 → 设备与服务 → 添加集成 → 搜 Model Context Protocol Server
- 勾选「Control Home Assistant」(允许 MCP 客户端控制设备)→ 提交
4e. Spotify
- 去 Spotify Developer Dashboard → Create App
- Redirect URI 填
https://my.home-assistant.io/redirect/oauth(官方推荐,复制粘贴不动) - 点开 Settings → View client secret → 拿到 Client ID + Client Secret
- HA → 设置 → 设备与服务 → 添加集成 → 搜 Spotify → 填凭据 → 授权
4f. Wyoming(见 Step 5a)
Wyoming 协议用于连接 Piper TTS。因为 Piper 需要 HA 启动后才能被发现,具体配置在 Step 5a 中。
Step 5:配好语音管道 跳过会炸
5a. 添加 Wyoming 协议
network_mode: host,HA 启动后应该自动发现 Piper。检查:HA → 设置 → 设备与服务 → 是否有 piper 被发现。如果没自动发现,手动添加:
HA → 设置 → 设备与服务 → 添加集成 → 搜 Wyoming → 填:
Host: 127.0.0.1
Port: 10200
5b. 配置默认语音助手
HA → 设置 → 语音助手 → 编辑默认的「Home Assistant」助手:
| 对话代理 | Extended OpenAI Conversation(走 opencode-go v4-flash,~0.8s 响应) |
| 语音转文字 | OpenAI Whisper Cloud(Groq,免费) |
| 文字转语音 | Piper(通过 Wyoming 协议自动发现) |
① 测对话引擎:HA → 开发者工具 → 服务 →
assist_pipeline.run,填 text: 现在几点。应返回文字回复(不含语音——因为这是纯文本测试)。② 测 Piper:HA → 设置 → 设备与服务 → 搜 piper。如果有实体,说明 Wyoming 自动发现了。点进去 → 实体 →
tts.speak 服务 → 填一段文字 → 应听到声音。③ 测 STT:HA 前端右上角点语音图标 → 说"开灯" → 应看到文字识别结果。
Step 6:Hermes 连接 HA 重要
让 Hermes 在微信里控制 HA 设备(开灯、查状态等),需要两步:
6a. HA 创建长期访问令牌:
6b. Hermes 配置 HA MCP 连接:
network_mode: host(必须,因为需要发现局域网设备 + 调 Hermes API Server 的 localhost)。Hermes 容器在 hermes-net 桥接网络上。不能用 Docker 网关 IP(如 172.18.0.1)直连 HA——host 网络的容器不在该网桥上。正确路径是走 Nginx 反代:Hermes 容器 →
ha.treetree.tech → Cloudflare → Nginx → HA:8123。这是本方案规划的标准路径,MCP 协议基于 HTTP,Nginx 透明代理完全合规。① 进入容器编辑 config.yaml:
docker exec -it hermes bash
# 容器内编辑(权限自动正确,不需要 sudo/chown)
nano /opt/data/config.yaml
# 在 mcp_servers 段末尾添加(注意保持 YAML 缩进):
mcp_servers:
# ... 已有的其他 MCP 服务器 ...
home-assistant:
url: https://ha.treetree.tech/api/mcp
headers:
Authorization: "Bearer ${HA_TOKEN}"
timeout: 120
② 写入 token 到 .env(仍在容器内):
hermes config set HA_TOKEN "步骤 6a 创建的长期访问令牌"
exit
③ 重启 Gateway:
docker compose restart
④ 验证:docker exec -it hermes hermes mcp list 应列出 home-assistant,状态为 connected。
config.yaml 的 mcp_servers 下配置 url + headers(官方文档)。密钥通过 ${VAR} 引用 .env,不留在 config.yaml 明文里,也不留在 shell 历史。之后在微信跟 Hermes 说"开灯",它就会通过 MCP 调 HA。
6c. HA 暴露实体 + 启用控制(必须!):
- HA → 设置 → 语音助手 → 暴露实体(直达链接)→ 勾选你想让 Hermes 控制的设备(灯、空调、开关等)
- HA → 设置 → 设备与服务 → 添加集成 → 搜 Model Context Protocol Server → 提交(无需任何配置,装完即用)
Step 7:Echo Show 越狱 + View Assist
详细越狱步骤见 Echo Show 5 越狱教程。
- Echo Show 5 越狱 → 刷 LineageOS 18.1(教程)
- 侧载 View Assist Companion App(VACA APK)
- 在 HA 侧装 View Assist 集成(HACS → 搜索 "View Assist")
- VACA 连接 HA 实例:
- VACA App 中填 HA URL:
https://ha.treetree.tech - 填 HA 长期访问令牌(新建一个,不要复用 hermes-mcp 的)
- 选择唤醒词模型:推荐
ok_nabu(开源,识别率高)或hey_mycroft
- VACA App 中填 HA URL:
- 在 VACA 中选择 HA 语音助手管道(Step 5 创建的那个)
Step 8:备份与日常维护 建议
# HA 配置备份(宿主机执行)
sudo tar czf ~/ha-backup-$(date +%Y%m%d).tar.gz -C / opt/data/ha/
# 建议加到 cron:每周日凌晨 3 点自动备份
# Hermes 备份(容器内执行)
docker exec -it hermes hermes backup --quick
# 日常健康检查
docker compose -f ~/ha-stack/docker-compose.yaml ps # 容器状态
curl -s http://localhost:8123/api/ # HA API 可达
docker exec -it hermes hermes mcp test ha-mcp # MCP 连接正常
• Groq STT 挂了 → 启动本地 wyoming-whisper 容器(+200MB 内存):
docker run -d --name wyoming-whisper --network host rhasspy/wyoming-whisper --model tiny-int8,然后在 HA 语音管道中切换 STT 提供商• opencode-go 网关挂了 → 临时在 HA 语音管道中切换对话代理为 Hermes API Server(慢但能用)
• Piper 容器挂了 → TTS 静默,HA 前端仍可显示文字回复
故障排查速查
| 症状 | 排查 |
|---|---|
| 语音没反应 | docker logs wyoming-piper | grep ERROR;检查 HA 语音管道三组件状态 |
| STT 不识别 | 检查 Groq API Key 是否有效:curl -sH "Authorization: Bearer $GROQ_KEY" https://api.groq.com/openai/v1/models | grep whisper |
| TTS 没声音 | Piper 是否运行:docker compose -f ~/ha-stack/docker-compose.yaml ps wyoming-piper;HA 语音管道中是否选了 Piper |
| Wyoming 发现不了 | mDNS 需要 5353/udp;确认 HA 和 Piper 都用 network_mode: host |
| Hermes MCP 调不了 HA | docker exec -it hermes hermes mcp test ha-mcp;检查长期访问令牌是否过期 |
| HA 内存飙升 | docker stats homeassistant;如果接近 1G 上限,调高 compose 里的 memory: 1G |
3. FAQ
Q: 为什么语音不用 Hermes LLM?
A: 语音对话用 Extended OpenAI Conversation 直接调 opencode-go v4-flash,响应 ~0.8s。Hermes 主模型是 v4-pro,走深度推理链路,不适合实时语音。两者各司其职——语音走快模型,微信走深模型。语音助手日常不需要深度推理。
Q: Hermes 还能控制 HA 设备吗?
A: 能。HA 内置 MCP Server 让 Hermes 在微信端调用 HA 服务(开灯、查状态等)。方向是 Hermes → HA,不是语音 → Hermes。两者通过 HA 的设备状态间接共享数据,不互相调用。
Q: 为什么不用 HA 内置的 OpenAI Conversation?
A: 内置 OpenAI Conversation 官方明确写"只支持 api.openai.com,不支持第三方兼容 API"。我们改用 Extended OpenAI Conversation(HACS,⭐1.4k),它在 UI 里直接提供 Base URL 字段,原生支持 opencode-go、DeepSeek 等任何 OpenAI 兼容 API。不需要环境变量 hack。
Q: HA Container 没有 Supervisor / Addon Store 怎么办?
A: 不影响。我们用 Docker 独立容器替代 addon(Piper、本地 Whisper STT 都是独立 docker run),功能完全一样。Spotify、MCP、OpenAI Conversation 都是内置集成,不需要 Supervisor。
Q: Groq 免费额度够吗?
A: 免费额度 28,800 音频秒/天,相当于 480 分钟语音。日常 50 次指令 × 3 秒 = 150 秒/天,只占 0.5%。绰绰有余。如需离线备份,可加 wyoming-whisper Docker 容器(+200MB 内存)。
Q: Hermes API Server 还要开吗?
A: 语音管道不经过 Hermes API Server,不需要开。如果将来想用 HA 直接调 Hermes(慢但有记忆),可选择性开启。
Q: Hermes API Server 安全吗?
A: 当前架构语音不走 Hermes API Server,此端口无需开启。如将来启用,API_SERVER_KEY 提供 bearer token 认证,端口绑定到 127.0.0.1 不暴露公网。
Q: 为什么 HA 用 host 网络?
A: HA 需要发现局域网设备和 Wyoming 服务(mDNS 组播发现)、通过 localhost 访问 Hermes。Wyoming 协议本身走 TCP,但服务发现依赖 mDNS(UDP 5353)。host 网络让 HA 能直接收到这些组播包。最省事。
Q: 为什么不直接用 Echo Show 自带的 Alexa?不越狱行不行?
A: Echo Show 不越狱时是正常的 Alexa 智能音箱,可以用来听 Spotify、问天气。但 Alexa 的语音管道完全锁在 Amazon 服务器里——你说的话被送到 Amazon 云端,由 Amazon 的 LLM 处理,你不能把任何环节替换成 Hermes。越狱就是拆掉这把锁,用 View Assist + HA 管道 + Hermes 替换整个语音链路。不越狱 = Amazon 控制一切;越狱 = 你控制一切。
Q: HA 用 host 网络,端口会被暴露到公网吗?
A: 会。HA 绑定 0.0.0.0:8123,公网直接可访问。但服务器的 UFW 只开放了 22/80/443,8123 被防火墙挡住。如果将来要开放其他端口,务必先确认安全。
Q: 音箱用 Sonos 怎么办?
A: Spotify API 不直接支持 Sonos。需要在 HA 中装 Music Assistant,通过它桥接 Sonos。
Q: Piper 语音质量怎么样?有别的选项吗?
A: en_US-lessac-medium 是 Piper 的中等质量模型,清晰度好、自然度一般。Piper 支持高、中、低三档模型。高模型(lessac-high)约 70MB,质量更好但内存多占 ~30MB。也支持中文语音(zh_CN-huayan-medium),需要额外下载。
Q: openWakeWord 用哪个模型?
A: 推荐 ok_nabu(开源社区最流行,误触发率低)。备选:hey_mycroft(传统)、alexa(如果你习惯了喊 Alexa 但不想连 Amazon)。View Assist 集成中可选模型。
4. 参考链接
| Echo Show 越狱教程 | pub.treetree.tech/echo-show-jailbreak/ |
| View Assist 官网 | dinki.github.io/View-Assist/ |
| View Assist Echo Show 5 | 专用指南 |
| HA Spotify 集成 | 官方文档 |
| HA MCP Server | 官方文档 |
| HA OpenAI Conversation(源码验证) | github.com/home-assistant/core |
| HA OpenAI Conversation(官方文档) | 官方文档 |
| ha-openai-whisper-stt-api (HACS 云 STT) | github.com/fabio-garavini/ha-openai-whisper-stt-api |
| Groq Console | console.groq.com/keys |