这是一份基于 Home Assistant 2025.12.x 版本特性的详细新手教程。
在 2024-2025 的演进中,Home Assistant (HA) 的 TTS(文本转语音)逻辑已经非常标准化,推荐使用通用的 tts.speak 服务,而不是旧版特定平台的服务(如 tts.google_translate_say),这样即使未来更换语音引擎,自动化脚本也不需要修改。
核心原理
- TTS 集成:负责将文字转换成音频流(如 Google Translate, Edge TTS, Piper 等)。
- 媒体播放器:负责播放音频的设备(如小爱同学、HomePod、浏览器、蓝牙音箱)。
- Jinja2 模板:负责抓取传感器数据并嵌入到文字中。
准备工作
- Home Assistant:版本 2025.12.2(或相近版本)。
- 播放设备:已接入 HA 的媒体播放器(实体 ID 示例:media_player.living_room_speaker)。
- 传感器:已接入的 PM2.5 传感器(实体 ID 示例:sensor.living_room_pm25)。
第一步:配置 TTS 服务 (Text-to-Speech)
对于新手,最简单且无需额外硬件的是使用内置的 Google Translate TTS(需网络环境支持)或通过 HACS 安装 Edge TTS(推荐,效果更自然)。这里演示官方内置流程。
- 打开 HA 左侧菜单 设置 (Settings) ->设备与服务 (Devices & Services)。
- 点击右下角 添加集成 (Add Integration)。
- 搜索 Google Translate text-to-speech 并点击添加。
- 配置语言代码,中文建议填写 zh-cn,点击提交。
- 系统会自动生成一个实体,通常为 tts.google_zh_cn。
注意
:如果你追求离线或更好的中文效果,建议搜索安装 “Piper” (官方本地附加组件) 或 “Edge TTS” (HACS),配置后的逻辑与下方完全一致。
第二步:验证 TTS 能否发声
在写自动化之前,先确保声音能播出来。
- 打开左侧菜单 开发者工具 (Developer Tools) ->服务 (Services/Actions)。
- 在搜索动作中输入:tts.speak (这是现代 HA 的标准发声动作)。
- 目标 (Target):选择刚才添加的 TTS 实体(如 tts.google_zh_cn)。
- 媒体播放器实体 (Media Player Entity):选择你的音箱(如 media_player.browser 或你的智能音箱)。
- 消息 (Message):输入 “你好,这是一次测试”。
- 点击 执行动作 (Perform Action)。
如果音箱响了,即可进入下一步。如果不响,请检查网络或音箱音量。
第三步:编写播报自动化 (UI 可视化模式)
我们要实现:每天早上 8 点,播报当前 PM2.5 数值,并给出开窗建议。
- 打开 设置 ->自动化与场景 ->创建自动化 ->创建新的自动化。
1. 设置触发条件 (Triggers)
- 点击 添加触发条件 -> 选择 时间 (Time)。
- 设置固定时间,例如 08:00:00。
2. 设置动作 (Actions) – 核心部分
- 点击 添加动作 -> 搜索并选择 TTS: Speak (或显示为“发送文本到语音”)。
- TTS 实体:选择 tts.google_zh_cn。
- 媒体播放器实体:选择你的音箱。
- 消息 (Message):这是最关键的一步,我们需要使用 模板 (Template) 来插入变量。请复制以下代码填入消息框:
codeJinja2早上好。当前客厅 PM2.5 指数为 {{ states(‘sensor.living_room_pm25’) }} 微克每立方米。{% set pm = states(‘sensor.living_room_pm25’) | float(0) %}建议:{% if pm
小白代码解析:
- {{ states(‘…’) }}:这是提取传感器数值的固定写法。请务必将 sensor.living_room_pm25 替换为你自己系统里的传感器 ID。
- {% set pm = … %}:定义一个变量叫 pm,方便后面做判断。float(0) 是为了防止传感器不可用时报错,默认设为 0。
- {% if … %}:逻辑判断,根据数值让小爱/Siri 说不同的话。
- 语言 (Language):可留空或填 zh-cn。
3. 保存自动化
- 点击右下角保存,命名为“每日空气质量播报”。
第四步:进阶技巧 (YAML 模式)
如果你想直接通过 YAML 代码配置或者分享给别人,可以点击自动化编辑器右上角的三个点,选择 在 YAML 中编辑。
以下是一个完整的、标准化的自动化 YAML 配置(基于 HA 2025 标准):
alias: 每日空气质量播报description: "通过TTS播报PM2.5及建议"trigger:
- platform: time
at: "08:00:00"condition: action:
- action: tts.speak
target:
entity_id: tts.google_zh_cn
# 你的TTS实体
data:
media_player_entity_id: media_player.living_room_speaker
# 你的音箱实体
message: >- 现在是 {{ now().strftime('%H点%M分') }}。 当前 PM2.5 数值为 {{ states('sensor.living_room_pm25') }}。 {% set pm = states('sensor.living_room_pm25') | float(0) %} {% if pm > 75 %} 空气不好,我已经为您自动开启了净化器。 {% else %} 空气清新,祝您心情愉快。 {% endif %}mode: single
常见问题与排坑指南
- 数值读出来是 “Unknown” 或 “Unavailable”:
- 原因:传感器当时掉线了或者 ID 填错了。
- 解决:在“开发者工具 -> 状态”里确认 sensor ID 是否正确,且有具体数值。
Google TTS 不响:
- 原因:Google 的服务在你的网络环境下可能无法连接。
- 解决:
- 方案 A:配置网络环境(路由层)。
- 方案 B(推荐):在 HACS 中下载 Edge TTS 集成,它是利用微软 Edge 浏览器的接口,国内连接速度极快且声音自然。配置方法与上述步骤完全一致,只需将 action 中的实体换成 tts.edge_tts。
如何让数值取整?
- 如果你不想听到“PM2.5 是 25.3421…”,可以在模板里加 round:
- {{ states(‘sensor.living_room_pm25’) | float(0) | round(0) }}
播放器不支持:
- 如果你使用的是 Sonoff 等简单的蜂鸣器网关,是不支持 TTS 的。你需要真正的媒体播放器(如 HomePod, Sonos, Google Nest, 或通过 DLNA 连接的音箱)。
通过以上步骤,你就可以在 Home Assistant 2025 中实现智能化的语音播报了。建议先跑通简单的“你好”,再逐步加入传感器数据。