全屋设备纳管与语音交互闭环 - Home Assistant 智能家居实战 02

[!NOTE] 专栏系列导读
本文为 《Home Assistant 智能家居实战》 专栏的第二篇(全屋设备纳管与语音交互闭环)。
在上一篇《Home Assistant 接入大模型实现设备全权控制》中,我们完成了群晖 NAS 容器环境突破、Extended OpenAI 插件集成与大模型原生服务调度权限打通。本篇将把家里的真实硬件(米家与涂鸦生态)规模化纳管进系统,并为其装配灵敏的“耳朵(ASR)”与富有情感的“嘴巴(TTS)”,达成完整的端到端语音交互闭环。


1. 目标效果与前置准备

在已具备大模型推理能力的基础上,系统化接入多品牌智能家居硬件,清洗规范实体属性与空间拓扑,并部署低延迟、免 API Key 的本地及云端语音流水线,达成脱离按键与屏幕的自然语音全权交互。

1.1 本文最终交付成果

完成本篇指南的实操后,系统将达成以下技术交付指标:

  1. 多生态硬件一键纳管:通过 Xiaomi Miot Auto 实现小米及生态链设备批量导入,理清账号模式与本地局域网(LAN)直连的协同边界;
  2. 实体语义标准化:消除晦涩机器码,建立与大模型空间推断逻辑高度匹配的人话别名与区域(Area)映射库;
  3. 高保真语音输出(TTS):集成微软 Edge-TTS 引擎,零成本获取真人级、具备自然呼吸停顿的播报音色;
  4. 语音识别流水线闭环(ASR):在群晖 Docker 部署 Wyoming Whisper,打通语音听写、大模型思考调度与语音回播的全链路;
  5. 低算力边缘调优模板:掌握低功耗 NAS CPU 在软解运行神经网络时的瓶颈排查与量化压缩方案。

1.2 前置环境与基础要求

  • 基建状态:已按照专栏第一篇完成 Home Assistant 容器部署,并就绪 Extended OpenAI Conversation 集成;
  • 网络环境:群晖 NAS 与家庭智能家居设备位于同一局域网(允许存在光猫与子路由跨网段物理拓扑);
  • 硬件设备:米家/涂鸦生态硬件(如智能开关、吸顶灯、空气净化器等)、带麦克风的测试终端(PC 浏览器或手机移动端)。

2. 核心概念极速通识(3分钟精要)

在着手配置设备与语音流水线前,需从底层协议与数据流向厘清 3 个核心机制。

概念 A:账号集成与局域网集成的通信拓扑与混合架构

在智能家居集成中,很多开发者常陷入“账号集成就是走外网慢、局域网集成就是纯离线快”的非黑即白误区。实际上,优秀的现代集成(如 Xiaomi Miot Auto)采用的是混合拓扑:

flowchart TD
    subgraph Cloud [云端环境]
        MiCloud["小米账号云端 (Mi Cloud)"]
    end

    subgraph LocalLAN [家庭局域网]
        HA["Home Assistant"]
        Router["主路由器 / AP"]
        DevLAN["支持局域网设备 (WiFi 插座/灯泡)"]
        DevCloud["仅云端设备 / 蓝牙子设备"]
    end

    HA -- "1. 登录一次性拉取设备清单与 32位通信 Token" --> MiCloud
    HA -- "2. 嗅探并在同一局域网建立直连 (UDP/miIO)" --> DevLAN
    HA -- "3. 局域网不可达或纯蓝牙设备走云端代发" --> MiCloud
    MiCloud -. "4. 云端下发指令" .-> DevCloud
  • 纯手动局域网集成:需要开发者使用抓包工具逐台破解提取 32 位 Token 并绑定静态 IP,配置成本极高且换网即瘫痪;
  • 账号混合集成:借助小米云端一次性拉取设备列表和通信密钥,但在实际发送控制指令时,优先自动探测本地局域网走内网直连(毫秒级响应、断外网可用),只有纯蓝牙设备或跨网段设备才无缝降级走云端中转。

概念 B:实体(Entity)标准化与 Assist 权限公开(Expose)机制

大模型并非通过视觉查看控制面板,而是通过底层的 execute_service 检索上下文中的实体字典:

  • 机器码 vs 语义实体:设备出厂 ID 通常为 switch.cuco_cp1_switch 或 light.leishi_eps118,大模型难以凭空猜测其意图;将其重命名为“书房主灯”并绑定“书房”区域,大模型即可结合空间关系进行复合推理;
  • Assist 公开沙箱:出于安全考虑,Home Assistant 默认不对大模型无节制暴露敏感实体。只有在语音助手「公开 (Expose)」列表中放行的设备,才会被注入大模型工具调用的可操作实体池。

概念 C:Home Assistant Voice Pipeline 流水线闭环

完整的语音助手不是一个单一程序,而是由四个独立模块串联而成的管道(Pipeline):

flowchart LR
    A["用户语音"] -->|"1. Web Audio"| B["ASR (STT: Whisper)"]
    B -->|"2. 转录纯文本"| C["大模型 (DeepSeek-Flash)"]
    C -->|"3. 调度硬件服务"| D["Home Assistant 设备执行"]
    C -->|"4. 输出回复文字"| E["TTS (Edge-TTS: 晓晓)"]
    E -->|"5. 高保真音频流"| F["扬声器播报"]

3. 手把手实战步骤(Step-by-Step)

步骤一:米家(Xiaomi Miot Auto)生态接入与避坑指南

进入 Home Assistant,点击左侧菜单栏 「设置」 →\rightarrow 「设备与服务」 →\rightarrow 右下角 「+ 添加集成」。

在搜索栏输入 xiaomi,系统会展示官方集成与带黄色纸箱图标的第三方集成,务必选择功能最完备的 Xiaomi Miot:

搜索并选择 Xiaomi Miot 集成

点击进入配置界面后,按照工程推荐原则进行配置:

Xiaomi Miot 账号与连接模式设置
  1. 设备连接模式:选择 Automatic (自动模式)。此模式下,同一网段设备走局域网毫秒级低延迟直连,跨网段或离线设备自动降级走云端;
  2. 翻译属性值描述:勾选。将空调模式、风速等底层英文代码翻译为直观中文;
  3. 通过型号/家庭/WiFi筛选设备:严禁新手勾选,避免正则规则填错导致设备搜寻落空。

[!WARNING] 踩坑排查:提示“该小米账户下没有设备”
在输入账号密码时,如果直接输入手机号或邮箱,常因微信快捷登录生成虚拟 ID 或格式匹配失败导致报错:

账户下无设备提示

解法:打开手机米家 App,进入「我的」→\rightarrow 点击头像查看纯数字小米 ID(如 102839482)。在配置面板中直接填入纯数字 ID 登录,即可一次性成功拉出完整设备池。

在接下来的设备筛选界面,系统默认选定 Exclude (排除) 模式:

设备筛选模式防坑选择

[!CAUTION] 避坑红线:不要在 Exclude 模式下点全选
界面规则为:“在排除模式中,如果不勾选任何设备,则相当于接入所有设备”。若误在列表全选,等于排除了所有设备。若需全量接入,直接保持列表留空并点击「提交」即可。

跨子网网络拓扑告警处理

若接入后系统弹出如下提示:

1
2
3
一些设备无法通过局域网连接,请检查它们的IP,并确保它们和HA在同一子网。
空气净化器(xiaomi.airp.mp5): 192.168.31.xxx
书房主灯(leishi.light.eps118): 192.168.1.xxx
  • 拓扑成因:家庭网络存在二级路由(如电信光猫网段 192.168.1.x 与小米路由器网段 192.168.31.x 并存),NAT 防火墙阻隔了局域网 UDP 广播;
  • 运行机制:因为选用了自动模式,这些设备会无缝降级为云端模式受控,大模型依然能正常调度;若追求极致纯局域网,后续将二级路由器改为“有线中继(AP 模式)”即可消除跨网段隔阂。

步骤二:实体人话标准化重命名与空间区域绑定

大模型对实体的精准掌控,完全依赖于清晰的自然语言描述与物理区域界定:

  1. 进入 「设置」 →\rightarrow 「设备与服务」 →\rightarrow 「实体」,找到刚纳管的设备;
  2. 点击设备进入详情,点击右上角齿轮:
    • 名称(Friendly Name):重命名为口语习惯名称(如将 cuco.plug.cp1 改为 书房主灯,将 xiaomi.airp.mp5 改为 空气净化器);
    • 区域(Area):划分物理房间(如 书房、客厅、次卧);
  3. 放行大模型权限:
    • 进入 「设置」 →\rightarrow 「语音助手」 →\rightarrow 顶部 「公开 (Expose)」 选项卡;
    • 确认刚接入的实体在 Assist 一列处于勾选开启状态。

步骤三:部署微软 Edge-TTS 赋予逼真自然的“嘴巴”

传统的本地 espeak 等发音引擎机械冰冷,微软 Edge-TTS 则提供了接近广播员水准的中文高保真流式合成能力,且免 API 密钥、免算力消耗。

  1. 打开 Home Assistant 左侧 「HACS」,搜索 tts;
  2. 找到由社区维护的 Hass Edge Tts(带微软四色方块图标):
HACS 搜索并安装 Hass Edge Tts
  1. 点击右下角 「下载 (Download)」,下载完成后重启 Home Assistant;
  2. 重启后在 「设置」 →\rightarrow 「设备与服务」 →\rightarrow 「添加集成」 搜索并添加 Edge TTS;
  3. 在配置项中选定业界公认最佳音色:
    • 女声推荐:zh-CN-XiaoxiaoNeural(晓晓,语气亲切温和,自然停顿极佳);
    • 男声推荐:zh-CN-YunxiNeural(云希,阳光清脆)。

步骤四:群晖 NAS 部署 Wyoming Whisper 打造本地离线“耳朵”

通过 Home Assistant 官方的 Wyoming 开放协议,在群晖 NAS 的 Docker 容器中跑一套轻量级本地 ASR:

SSH 连接群晖 NAS,终端执行一行容器部署命令:

1
2
3
4
5
6
7
8
docker run -d \
--name=whisper \
--restart=unless-stopped \
-p 10300:10300 \
-v /volume1/docker/whisper:/data \
rhasspy/wyoming-whisper \
--model base \
--language zh

部署完成后:

  1. 回到 HA 的 「设备与服务」 →\rightarrow 添加集成搜索 Wyoming Protocol;
  2. 主机 (Host) 填入群晖局域网 IP,端口 (Port) 填 10300,点击提交即刻完成对内网 Whisper 语音识别服务的纳管。

步骤五:组装 Voice Assistant 语音流水线并完成现场闭环

将前面准备就绪的各个器官组装成完整的智能体管家:

  1. 进入 「设置」 →\rightarrow 「语音助手」,点击默认的 Home Assistant 流水线;
  2. 逐项配置流水线组件:
    • 语音转文本 (STT):选择 Whisper;
    • 对话代理 (Conversation Agent):选择第一篇就绪的 Extended OpenAI Conversation(对应 deepseek-flash);
    • 文本转语音 (TTS):选择 Edge TTS (zh-CN-XiaoxiaoNeural);
  3. 点击保存更新。

4. 高频踩坑与常见问题答疑(FAQ)

Q1: 电脑端点击麦克风报 [object Object] 且麦克风挂红感叹号无法录音?

在电脑端网页打开 Assist 时,默认仅展示文字输入框:

Assist 默认无麦克风交互界面

当配置好 STT 后麦克风出现,但一旦点击,前端连续抛出 [object Object] 并在麦克风旁挂出红色感叹号:

浏览器安全沙箱拦截麦克风导致前端异常

根因分析:现代 Chrome / Edge 浏览器的安全沙箱机制规定,非安全源(未启用 HTTPS 的局域网 HTTP 地址如 http://192.168.1.x:8123)严禁页面调用麦克风媒体接口(getUserMedia)。前端捕获了浏览器拒绝授权的异常对象,未作字符串序列化直接渲染,导致呈现 [object Object]。

根治解法:

  1. 打开 Chrome 或 Edge,地址栏输入:
    1
    chrome://flags/#unsafely-treat-insecure-origin-as-secure
  2. 将该项状态改为 Enabled;
  3. 在下方文本框填入 Home Assistant 的完整局域网访问地址(例如 http://192.168.1.xxx:8123);
  4. 点击 Relaunch 重启浏览器,重新进入 HA 即可正常获取麦克风拾音权限;
  5. 移动端避坑:若在手机使用,直接安装 Home Assistant 官方手机 App,App 原生具备麦克风系统权限,无此浏览器沙箱限制。

Q2: 低功耗 NAS 跑 Whisper 识别卡顿 5~8 秒、CPU 满载怎么办?

在手机端成功开嗓测试后,普遍反馈“大模型回答很灵,但说完话后要干等好几秒才开始响应”。

根因分析:整个链路中,大模型云端推理仅需 0.3 秒,Edge-TTS 合成仅需 0.3 秒,瓶颈 100% 堆积在群晖 NAS CPU 软解神经网络 ASR 上。群晖常见的 J4125、N5105 等低功耗芯片在缺乏独立 GPU 加速时,计算 1.4 亿参数的 base 模型极为吃力。

优化对策:换用专为边缘设备打造的 8 位整数量化模型 tiny-int8(体积仅 30MB 左右):

1
2
3
4
5
6
7
8
9
10
11
12
# 1. 停止并移除高负荷容器
docker stop whisper && docker rm whisper

# 2. 以极速量化配置重载
docker run -d \
--name=whisper \
--restart=unless-stopped \
-p 10300:10300 \
-v /volume1/docker/whisper:/data \
rhasspy/wyoming-whisper \
--model tiny-int8 \
--language zh

替换后,NAS 端的语音识别处理速度将提升 3~5 倍。


Q3: 为什么在 Assist 文本框打字和大模型交互时没有声音?

机制解释:Home Assistant 原生设计了防打扰策略。当检测到用户是通过键盘文本输入交互时,系统假定用户处于静音办公场景,默认不会自动触发音频外放;只有在通过麦克风语音输入完成对话时,系统才会自动激活流式 TTS 外放语音回复。


5. 进阶探索与总结

5.1 成果验收

至此,我们不仅将家庭各类异构硬件规范化收归于大模型调度体系之下,还为 Home Assistant 注入了全双工语音生命体征:

  • 输入感知:通过轻量化 Whisper 实时将人类自然语音转化为控制指令;
  • 大脑推断:依托 deepseek-flash 结合区域空间知识进行精确的意图理解与服务调用;
  • 输出反馈:通过微软 Edge-TTS 晓晓高保真音色即时给出温和自然的语音反馈。

5.2 进阶探索方向

  • 实体小爱音箱深度劫持:摆脱每次打开手机 App 点击麦克风的束缚,通过在群晖部署 xiaogpt 容器或监听 Xiaomi Miot 的 last_query 属性,将客厅/床头现成的小爱音箱改造为大模型的前端硬件麦克风与拾音阵列,彻底释放 NAS 的 ASR 算力负担,达成百毫秒级自然对答;
  • ESP32-S3 专属拾音盒子定制:借助开源硬件构建极小体积的局域网 Wyoming 离线语音终端,实现真正的全屋分布式自由唤醒与控制。