『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 172028|回复: 319

[插件集成] 让你的HomePod可以TTS?没有那么多麻烦

  [复制链接]

20

主题

550

帖子

3603

积分

元老级技术达人

积分
3603
金钱
3013
HASS币
210

教程狂人突出贡献

发表于 2021-7-10 15:04:39 | 显示全部楼层 |阅读模式
本帖最后由 involute 于 2022-6-8 03:52 编辑

2022年6月

由于从HA2022.3开始,官方的AppleTV集成已经可以完美支持HomePod系列,而且作为一个media_player是全功能的,比我这个只能TTS的要好得多。所以请使用官方集成。


但如果你是第三方的兼容AirPlay设备,倒也许还可以继续试试这个。

2021年9月10日更新v0.0.8


修改了一个可能导致集成卸载失败的问题。

2021年8月6日更新



由于Home Assiatant2021.7.x-2021.8.x自带的环境配置上存在BUG,导致在以上版本的HomeAssistant中使用会导致无法配置集成、播放时造成系统崩溃的问题。
github上的@tsunglung帮我找到了解决方案,请看”安装前准备“下的”2021.7.x或之后版本“部分。

---------------------------------------------------------------------------------------------------------------------------------------

前言
本来由于没有良好的TTS引擎,一直也没有让HomePod说话的兴致,自从前几天弄了了微软的TTS改进版(HA自带的微软TTS引擎的全面改进威力加强版)之后,让HomePod说话的兴致就来了。

试过几种方案,forked-daapd确实可以发声,但也不知是不是我个人的原因,延迟巨大,时不时还卡死,肯定是无法正常使用的。其它方案要么干脆不出声,要么出两下,就不行了。
那只能自己撸了,好在有一个开源的py库叫pyatv,本来是为了控制AppleTV使用的,搞定个AirPlay不是小事?而且pyatv是HA自带组件,是HA中Apple-TV集成的依赖库。
写测试代码,跑起来一切没问题,可以发现AirPlay设备,可以出声,一切没问题。可一旦写成HA集成,上了HA,连AirPlay设备都发现不了了,仔细检查,发现HA自带的pyatv是0.7.7,而我跑测试代码的库是pyatv0.8.1,对比了两个版本的代码差异,发现从0.8以后加入了新的协议,才可以正确支持AirPlay。
好,搞清楚了,开始吧。

重要注意事项
docker安装的Home Assistant,必须是"与Docker Host使用相同的网络",而不是能是桥接模式。否则Home Assisatant与其它网络设备实际上不在一个网络中,除非你会处理RSTP协议的跨网段路由问题,否则无法正常使用AirPlay设备。

安装前准备
2021.6.x或之前版本

直接在宿主机上运行pip升级pyatv,会报告缺少依赖组件,但编译依赖组件,却又缺少gcc,所以:
1、在宿主机中安装gcc
我是群晖docker安装的,docker中跑的是Alpine Linux,所以包管理命令是apk,所以分别执行以下两个命令
apk update
apk add build-base
在Home Assistant中安装gcc,我也是挺无奈的-_-。


2、升级pyatv

警告:虽然本身Home Assistant的pip包已经有一堆的冲突,但是升级pyatv可能会造成新的包版本冲突,虽然我目前使用一切正常,但不代表你的系统不会因为这些包冲突出现问题,所以请慎重考虑。

宿主机中运行
pip3 install --upgrade pyatv

3、重新升级attrs
由于升级pyatv时降级了attrs包,这个包HomeAssistant要求版本至少是20.2,别的包冲突咱们不管了,这个把它升回来
宿主机中运行
pip3 install --upgrade attrs

2021.7.x或之后版本

2021.7-2021.8中存在着配置上的Bug,使用本插件会造成无法正确配置集成、播放时造成系统崩溃的问题,这是因为HomeAssisatant中自带的miniaudio存在问题。
请依次完成以下操作:
1、在宿主机中安装gcc
我是群晖docker安装的,docker中跑的是Alpine Linux,所以包管理命令是apk,所以分别执行以下两个命令
apk update
apk add build-base


2、卸载miniaudio, 宿主机中运行
pip3 uninstall --yes miniaudio

3、重新安装minaudio
pip3 install miniaudio



安装
HACS安装自定义存储库,或者下载压缩包,放到custom_component下,重启Home Assistant。
地址我会放在帖子后部


配置
在集成界面,添加Apple Airplayer,会自动查找支持的设备,选其一点提交即可,缓存目录,和我TTS那贴中的缓存目录配置成一样的。要配置多部设备,多次添加该集成即可。

airplay.png

airplay2.png

tips:为TTS配置缓存,可以使得你的TTS如果说的话是以前说过的,可以使得TTS时根本不需要访问网络,可以提高TTS响应速度,甚至在你的微软TTS服务到期后,仍可正常使用以前说过的语音。


支持的设备
  • AirPort Express
  • AirPort Express Gen2
  • Apple TV 2
  • Apple TV 3
  • Apple TV 4
  • Apple TV 4K
  • Apple TV 4K Gen2
  • HomePod
  • HomePod Mini
  • 其它AirPlay兼容设备
我个人是穷鬼,只有一个HomePod Mini,兼容情况有劳各位测试并反馈。


实体
配置完成生成的media_player实体,支持开关和音量调节。
但并不是真正的电源开关,而只是控制让其TTS时是否发声及发声音量。
作用嘛,可以在脚本中调整音量再发声,满足不同场景要求,或者你半夜回家的时候先关闭电源,开门本应播放欢迎词的时候就不会老少皆知了(偷笑)。

项目地址,好用记得点星哦
https://github.com/georgezhao2010/apple_airplayer

本地压缩包下载
游客,如果您要查看本帖隐藏内容请回复


pyatv升级图解
点开看大图,就看着我图中的红圈点或者输入,除了包冲突,不应该有报错
1.png
2.png
3.png
4.png
5.png
6.png











评分

参与人数 5金钱 +53 HASS币 +20 收起 理由
wangtwothree + 3 感谢楼主分享!
yotashop + 5 感谢楼主分享!
XCray + 20 赠人玫瑰,手留余香!
tianzhuang55 + 5 膜拜大神!
+ 20 + 20 厉害了word楼主!

查看全部评分

回复

使用道具 举报

32

主题

986

帖子

4233

积分

论坛元老

Rank: 8Rank: 8

积分
4233
金钱
3207
HASS币
110

教程狂人论坛风云人物

发表于 2021-7-10 15:46:01 | 显示全部楼层
感谢楼主分享!
请问使用这个时如果HomePod正在播放音乐,被打断后还能自动恢复吗?
回复

使用道具 举报

20

主题

550

帖子

3603

积分

元老级技术达人

积分
3603
金钱
3013
HASS币
210

教程狂人突出贡献

 楼主| 发表于 2021-7-10 16:54:17 | 显示全部楼层
27hh 发表于 2021-7-10 15:46
感谢楼主分享!
请问使用这个时如果HomePod正在播放音乐,被打断后还能自动恢复吗? ...

你这个需求我倒是没想过,我试了一下,不行。但应该可以实现。
回复

使用道具 举报

9

主题

534

帖子

4530

积分

元老级技术达人

积分
4530
金钱
3986
HASS币
60
发表于 2021-7-10 17:01:31 | 显示全部楼层
感谢分享,forked-daapd一直不稳定,所以没敢用。问下如果手机AirPlay之后,tts还能用吗?
回复

使用道具 举报

42

主题

522

帖子

2945

积分

金牌会员

Rank: 6Rank: 6

积分
2945
金钱
2423
HASS币
10
发表于 2021-7-10 17:34:10 | 显示全部楼层
这个可以试试,之前我的也是用forked-daapd延迟巨大就放弃了。感谢
回复

使用道具 举报

20

主题

550

帖子

3603

积分

元老级技术达人

积分
3603
金钱
3013
HASS币
210

教程狂人突出贡献

 楼主| 发表于 2021-7-10 19:12:32 | 显示全部楼层
更新了一下v0.0.3,可以重新下载
回复

使用道具 举报

34

主题

709

帖子

4693

积分

论坛元老

Rank: 8Rank: 8

积分
4693
金钱
3974
HASS币
50
发表于 2021-7-10 19:29:42 | 显示全部楼层
没有homepod,,,,那就羡慕一下大佬吧
回复

使用道具 举报

42

主题

522

帖子

2945

积分

金牌会员

Rank: 6Rank: 6

积分
2945
金钱
2423
HASS币
10
发表于 2021-7-10 19:50:05 | 显示全部楼层
一样的群晖docker安装的ha,按步骤来,集成添加不上,转圈圈然后就啥也没了,再点添加就没连圈圈都不转了
回复

使用道具 举报

20

主题

550

帖子

3603

积分

元老级技术达人

积分
3603
金钱
3013
HASS币
210

教程狂人突出贡献

 楼主| 发表于 2021-7-10 20:35:14 | 显示全部楼层
本帖最后由 involute 于 2021-7-10 20:36 编辑
yinghu183 发表于 2021-7-10 19:50
一样的群晖docker安装的ha,按步骤来,集成添加不上,转圈圈然后就啥也没了,再点添加就没连圈圈都不转了 ...

有这个提示吗?
err.png

日志中有报错吗?

在docker的终端中执行
pip list | grep pyatv
结果是啥?
回复

使用道具 举报

2

主题

137

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
金钱
2249
HASS币
0
发表于 2021-7-10 21:24:36 | 显示全部楼层
Hassos (core  2021.7.x , python3.9.x) 装不起来 ,
ha core 2021.7.1 run Mac (python 3.9.x)   装不起来 ,
有安装成功的是 docker ha core  2021.6.5 (python 3.8.x)

錯誤代碼
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 790, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "/Users/zonglong/.homeassistant/custom_components/apple_airplayer/config_flow.py", line 5, in <module>
    from .device_manager import DeviceManager
  File "/Users/zonglong/.homeassistant/custom_components/apple_airplayer/device_manager.py", line 9, in <module>
    DeviceModel.AirPortExpress: "AirPort Express",
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/enum.py", line 352, in __getattr__
    raise AttributeError(name) from None
AttributeError: AirPortExpress
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-24 02:08 , Processed in 0.067755 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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