找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 132|回复: 0

17HomeAssistant 中如何通过TTS播报传感器的数据,例如PM2.5数值或者建议

[复制链接]

30

主题

4

回帖

228

积分

管理员

积分
228
发表于 2025-12-25 23:06:35 | 显示全部楼层 |阅读模式



这是一份基于 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 < 35 %}空气质量优,适合开窗通风。{% elif pm < 75 %}空气质量良,可以适当通风。{% else %}空气污染较重,请关闭门窗并开启净化器。{% endif %}



小白代码解析:

  • {{ states('...') }}:这是提取传感器数值的固定写法。请务必将 sensor.living_room_pm25 替换为你自己系统里的传感器 ID。

  • {% set pm = ... %}:定义一个变量叫 pm,方便后面做判断。float(0) 是为了防止传感器不可用时报错,默认设为 0。

  • {% if ... %}:逻辑判断,根据数值让小爱/Siri 说不同的话。


  • 语言 (Language):可留空或填 zh-cn。


3. 保存自动化
  • 点击右下角保存,命名为“每日空气质量播报”。



第四步:进阶技巧 (YAML 模式)

如果你想直接通过 YAML 代码配置或者分享给别人,可以点击自动化编辑器右上角的三个点,选择 在 YAML 中编辑

以下是一个完整的、标准化的自动化 YAML 配置(基于 HA 2025 标准):

codeYaml

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 中实现智能化的语音播报了。建议先跑通简单的“你好”,再逐步加入传感器数据。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|HomeAssistant 莱特智能 ( 渝ICP备11002672号-1 )

GMT+8, 2026-3-3 02:03 , Processed in 0.071516 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表