智能家居
智能家居语音播报通知中枢实战:用 Home Assistant + TTS 让音箱主动播报天气提醒与告警
2026年11月8日
用 HA + 本地 TTS 把天气提醒门铃告警主动播报到音箱,含防打扰策略
智能家居语音播报通知中枢实战:用 Home Assistant + TTS 让音箱主动播报天气提醒与告警
摘要:语音助手会“听”,但一个聪明的家也需要会“说”。本文用 Home Assistant 的 TTS 服务,把天气、日程、门铃与安防告警主动播报到音箱,覆盖本地引擎选型、分区播报与防打扰策略。
一、播报通知 vs 语音助手:先分清输入输出
很多人装了 Home Assistant 离线语音助手(Whisper+Piper)后,只把它当“听懂指令”的工具。其实语音有两个方向:Whisper 是“听”(语音识别输入),而 TTS(文本转语音)是“说”(主动播报输出)。
主动播报的典型场景包括:早晨念一遍今日天气与日程、快递到站提醒、门铃“门口有人”、漏水燃气告警、老人吃药提醒。用本地 TTS 而不是厂商云音箱的好处是:隐私不出户、可与任意传感器自由编排、不依赖第三方服务可用性。
二、TTS 引擎选型:本地优先
如果你之前装过语音助手,Piper 多半已经在 HA 里了。Piper 是离线、支持中文且音色自然的 TTS 引擎,首推。备选方案:
- 微软 Edge TTS:音质好但需联网;
- 百度/讯飞 TTS:需申请 API key,按量计费。
在 configuration.yaml 中确认 tts 平台配置:
tts:
- platform: piper
voice: zh_CN-huayan-medium
测试时调用服务 tts.speak,指定 media_player 实体与目标文本即可。
三、让音箱真正“开口”:播放设备接入
这是最容易卡住的一步。小爱、天猫精灵等厂商音箱大多封闭,不能直接被 HA 驱动播报,需要走 Homebridge、巴法云或厂商 TTS 转发通道。更干净的方案是本地播放设备:
- 用 ESP32 接 MAX98357 功放模块做廉价播报终端;
- 或用一台常开的 Linux 小主机接 USB 音箱,配合 VLC/MPD 媒体播放器;
- 也可直接用带扬声器的 HA 语音一体设备。
核心是把设备暴露为一个 media_player 实体,然后用 tts.speak 把生成好的语音推给它。
四、把事件变成播报:自动化编排
早间播报脚本示例:
alias: 早间语音播报
trigger:
- platform: time
at: "07:30:00"
action:
- service: tts.speak
target:
entity_id: media_player.living_room
data:
cache: true
message: >-
早上好,今天{{ states('weather.home') }},
最高温度{{ state_attr('weather.home','temperature') }}度,
记得{{ states('sensor.today_event') }}。
门铃与告警触发的思路一致:门铃 binary_sensor 翻转时播报“门口有人”;水浸、燃气传感器触发时,全屋音箱播报并同步推送手机。
五、分区播报与防打扰
- 分区:卧室音箱夜间保持安静,客厅白天播报;
- 安静时段:用 time_condition 限定 22:00-07:00 只推手机、不发声;
- 节流:水浸类持续触发会刷屏,用“同事件 5 分钟内不再播报”的条件拦截;
- 音量渐起:避免突然高音量惊吓家人或宠物。
六、进阶:让播报更自然
利用模板拼接动态数据,让每句话都不一样;多条播报用队列(queue)避免互相打断;进阶玩法是用本地 LLM 先把天气、日历、待办汇总成一段“今日简报”,再交给 TTS 念出来,体验接近真人播报。
小结:把 Home Assistant 的 TTS 服务当成全屋的“嘴巴”,先选好本地引擎,再接好播放设备,最后用自动化把天气、门铃、告警等事件转成自然语音。配合分区与防打扰策略,家就真正“会说话”了。