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

 找回密码
 立即注册
查看: 1877|回复: 12

[技术探讨] 解决漫步者EDIFIER_MA3播放网易云音乐歌单不能下一曲问题

[复制链接]

4

主题

12

帖子

139

积分

注册会员

Rank: 2

积分
139
金钱
127
HASS币
0
发表于 2024-5-27 17:22:09 | 显示全部楼层 |阅读模式
本帖最后由 zhmx 于 2024-5-27 21:12 编辑

安装了https://github.com/shaonianzhentan/ha_cloud_music 网易云音乐插件,在用咸鱼淘来的漫步者EDIFIER_MA3播放歌单时不能自动下一曲,涉及自动下一曲的音箱播放器属性有两个media_duration和media_position,media_duration是当前播放音乐的总时长,media_position是当前播放进度,通过观察这两个属性数值变化发现media_position数值不能走到和media_duration一样,根据不同情况一般差1-10秒的样子,原因我分析了下可能漫步者EDIFIER_MA3每10秒向home assistant报告一次属性,如果media_position还没到报告时间歌曲就播放完了,media_position就停在上一次报告数值不会再刷新了,造成home assistant认为歌曲还没播放完就不会下一曲了,于是我尝试的写了一个自动化脚本,判断media_duration和media_position两个属性的值的差值(剩余时间)小于某个数值就执行下一曲。脚本如下,实体名称是我自己的,初次写脚本不对的地方请大家指正:
- id: '1715705669965'
  alias: 自动下一曲
  description: ''
  trigger:
    - platform: time_pattern
    seconds: /5   # 每5秒触发一次
  condition:
  - condition: state
    entity_id: media_player.yun_yin_le_edifier_ma3_can_ting
    state: playing  # 检查播放器状态为播放状态
  - condition: numeric_state
    entity_id: media_player.yun_yin_le_edifier_ma3_can_ting
    attribute: media_duration
    above: 0  # 检查播放器属性media_duration的值不为零
  - condition: template
    value_template: '{{ (state_attr(''media_player.yun_yin_le_edifier_ma3_can_ting'',''media_duration'')  - state_attr(''media_player.yun_yin_le_edifier_ma3_can_ting'',''media_position''))  <11 }}'
  # 比较媒体播放器两个属性的差值(剩余时间)是否小于11,由于播放器每10秒报送一次属性状态,故数值为11,如果设置为小于11的数可能就不能执行下一曲了,如果大于11的数值就会过早切换歌曲
  action:
  - delay:
      hours: 0
      minutes: 0
      seconds: 5
      milliseconds: 0
    enabled: false  # 根据情况看是否延时5秒再执行下一曲动作,如果要延时把 enabled: false 这行删了就行
  - service: media_player.media_next_track
    target:
      entity_id: media_player.yun_yin_le_edifier_ma3_can_ting
    data: {}
  delay:
    hours: 0
    minutes: 0
    seconds: 15
    milliseconds: 0   # 执行下一曲动作后,延时15秒,等待播放器将属性数值报告上来。



评分

参与人数 3金钱 +33 收起 理由
咸味土豆 + 20 感谢楼主分享!
Awe7 + 1
隔壁的王叔叔 + 12 感谢楼主分享!

查看全部评分

回复

使用道具 举报

4

主题

12

帖子

139

积分

注册会员

Rank: 2

积分
139
金钱
127
HASS币
0
 楼主| 发表于 2024-5-27 21:06:11 | 显示全部楼层
在最后加了延时15秒

delay:
    hours: 0
    minutes: 0
    seconds: 15
    milliseconds: 0   # 执行下一曲动作后,延时15秒,等待播放器将属性数值报告上来。

不知道前面 检查播放器属性media_duration的值不为零 这个条件有没有意义,用的再看看了。
回复

使用道具 举报

4

主题

12

帖子

139

积分

注册会员

Rank: 2

积分
139
金钱
127
HASS币
0
 楼主| 发表于 2024-5-27 21:17:23 | 显示全部楼层
暂时屏蔽判断播放器属性media_duration的值不为零这个条件了,万一因为网络原因,歌曲没有播放,得到的media_duration的值就是零,这样歌曲播放就停止了,去掉这个条件就能保证歌单能继续播放下去
回复

使用道具 举报

40

主题

2176

帖子

8286

积分

元老级技术达人

积分
8286
金钱
6095
HASS币
110
发表于 2024-5-28 08:34:52 | 显示全部楼层
我一直以为是没有版权 所以放不下去....
回复

使用道具 举报

146

主题

2267

帖子

7002

积分

元老级技术达人

积分
7002
金钱
4730
HASS币
30
发表于 2024-5-28 16:42:33 | 显示全部楼层
ghostist 发表于 2024-5-28 08:34
我一直以为是没有版权 所以放不下去....

我也是的
回复

使用道具 举报

32

主题

285

帖子

1815

积分

金牌会员

Rank: 6Rank: 6

积分
1815
金钱
1530
HASS币
0
发表于 2024-5-28 16:42:57 | 显示全部楼层
非常优秀,以前都是可以自动下一曲的,但是最近确实不能自动播放了,完美解决。
回复

使用道具 举报

22

主题

610

帖子

2749

积分

金牌会员

Rank: 6Rank: 6

积分
2749
金钱
2139
HASS币
0
发表于 2024-5-28 22:52:29 | 显示全部楼层
你的脚本无法正常复制
回复

使用道具 举报

5

主题

82

帖子

1295

积分

金牌会员

Rank: 6Rank: 6

积分
1295
金钱
1213
HASS币
0
发表于 2024-5-29 21:18:01 | 显示全部楼层
我是在nodered中实现的,通过判断media_player.edifier_ma3_fae4的状态是否等于idle实现的,偶尔有bug会自动换歌,不经常出现就忍了。
回复

使用道具 举报

4

主题

12

帖子

139

积分

注册会员

Rank: 2

积分
139
金钱
127
HASS币
0
 楼主| 发表于 2024-5-30 00:22:19 | 显示全部楼层
a_dongde 发表于 2024-5-28 22:52
你的脚本无法正常复制

发脚本莫名发不全就直接粘贴了,应该是没问题的,主要保留空格,实在不行给我邮箱,我发给你
回复

使用道具 举报

32

主题

285

帖子

1815

积分

金牌会员

Rank: 6Rank: 6

积分
1815
金钱
1530
HASS币
0
发表于 2024-6-5 14:35:39 | 显示全部楼层
zhmx 发表于 2024-5-27 21:17
暂时屏蔽判断播放器属性media_duration的值不为零这个条件了,万一因为网络原因,歌曲没有播放,得到的medi ...

是的,我也遇到这个问题了,突然不播放了,看了下运行情况,问题就是出在这个地方。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-23 20:25 , Processed in 0.055053 second(s), 32 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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