使用Python脚本控制HEOS播放器
项目描述
使用Python脚本控制HEOS播放器
需求
您在本地网络中有一个HEOS扬声器,并且安装了Python 3。
用法
-
使用
pip install heospy
安装软件包(从PyPI的最新发布版)或pip install git+https://github.com/ping13/heospy.git
(如果您想使用最新的git版本)。您还可以下载源代码包,并运行pip install .
。 -
创建一个
config.json
文件,该文件可能位于名为$HOME/.heospy/
的目录中,或者位于环境变量$HEOSPY_CONF
指定的目录中。您还可以通过-c
直接指定配置文件。该配置文件包含您要控制的HEOS播放器的名称以及您的HEOS账户的用户名和密码。请参阅example-config.json
以获取示例。 -
首次运行脚本以查看其如何工作
$ heos_player 2017-02-12 20:32:29,880 INFO Starting to discover your HEOS player 'Living room' in your local network 2017-02-12 20:32:36,824 INFO Found 'Living room' in your local network $
-
现在您可以调用任何来自CLI规范的命令,也可以查看
docs/
文件夹。额外的参数通过-p
提供。播放器ID将自动提交。以下是一些示例heos_player player/toggle_mute heos_player player/set_volume -p level=19 heos_player player/play_preset -p preset=3 heos_player player/set_play_state -p state=stop heos_player group/toggle_mute heos_player group/toggle_mute -p gid=-1352658342
使用
--help
标志获取详细信息。
解析HEOS的响应
heos_player
返回一个直接来自HEOS播放器的JSON对象。例如
heos_player player/get_volume
给出如下内容
{
"heos": {
"message": "pid=-1352658342&level=13",
"command": "player/get_volume",
"result": "success"
}
}
遗憾的是,HEOS将一些结果隐藏在message
属性中(在此处:主播放器的音量级别)。heospy
解析消息字符串,并将包含的属性放在单独的属性heos_message_parsed
中
{
"heos_message_parsed": {
"pid": "-1352658342",
"level": "13"
},
"heos": {
"message": "pid=-1352658342&level=13",
"command": "player/get_volume",
"result": "success"
}
}
使用jq
,您可以直接在命令行中获取结果
$ heos_player player/get_volume | jq .heos_message_parsed.level
"13"
主播放器设置和通过名称引用其他播放器
类HeosPlayer
假设有一个主HEOS播放器,存储在配置文件中。对于以player/
开头的命令,我们假设应使用此播放器,否则您需要明确将播放器ID作为参数pid
指定。
您还可以通过使用假参数pname
指定播放器:类HeosPlayer
将搜索具有给定名称的播放器,并尝试将其转换为播放器ID,例如
$ heos_player player/get_volume -p pname=Küche
[...]
2019-01-15 20:04:51,624 INFO Issue command 'player/get_volume' with arguments {"pname": "K\u00fcche"}
2019-01-15 20:04:51,624 DEBUG translated name 'Küche' to {'pname': 'pid', 'gname': 'gid'}=941891005
2019-01-15 20:04:51,625 INFO cmd : player/get_volume, args &pid=941891005
[...]
{
"heos_message_parsed": {
"pid": "941891005",
"level": "12"
},
"heos": {
"message": "pid=941891005&level=12",
"command": "player/get_volume",
"result": "success"
}
}
如果主播放器是组中的主播放器,则该组也是以group/
开头的命令的主组。同样,您可以通过明确提及组ID作为参数来覆盖此设置。您还可以使用假参数gname
指定组。
HEOS命令的基本脚本编写
您还可以一次性执行一系列命令。该序列可以以文本文件的形式给出
heos_player -i cmds.txt
例如cmds.txt
的示例
system/heart_beat
# let's set a volume level
player/set_volume level=10
# let's check if the volume is correct
player/get_volume
注意,可以包含注释,以#
开头。还有一个特殊的命令wait
,它等待一段时间后播放下一个命令。
# play an MP3 file, wait 360 seconds and then turn the mute button on
player/play_stream pname=Küche url=http://example.com/example.mp3
wait 360
player/set_mute -p state=on
目前的一个限制是heospy
无法监听来自任何HEOS播放器的事件。
您还可以从stdin
获取命令序列
printf "system/heart_beat\nplayer/set_volume level=10\nplayer/get_volume" | heos_player -i -
示例用法
与HomeKit一起使用
使用Homebridge和Homebridge Script2插件,您可以将heospy
-脚本绑定到HomeKit按钮
示例配置
{
"on": "cat /homebridge/scripts/heos_on.heospy | /homebridge/env/bin/heos_player -c /homebridge/heos_config.json -i -",
"name": "HEOS",
"on_value": "play",
"off": "printf 'player/set_play_state pid=-19041904 state=pause' | /homebridge/env/bin/heos_player -c /homebridge/heos_config.json -i -",
"state": "/homebridge/env/bin/heos_player -l ERROR -c /homebridge/heos_config.json player/get_play_state pid=-19041904 | jq -r .heos_message_parsed.state",
"accessory": "Script2"
}
示例heos_on.heospy
脚本
group/set_mute gid=-19041904 state=off --ignore-fail
player/set_play_state pid=-1440680417 state=play
group/set_volume gid=-19041904 level=13 --ignore-fail
与Raspberry Pi和Kodi一起使用
如果您在Raspberry Pi上安装了OSMC或其他Kodi媒体中心实现,您可以将HEOS上的某些操作映射到键映射。
示例keyboard.xml
文件
<keymap>
<global>
<keyboard>
<F1>RunScript(heos_player, player/play_preset, -p, preset=1)</F1>
<F2>RunScript(heos_player, player/play_preset, -p, preset=2)</F2>
<F3>RunScript(heos_player, player/play_preset, -p, preset=3)</F3>
<F4>RunScript(heos_player, player/play_preset, -p, preset=4)</F4>
<F12>RunScript(heos_player, player/set_play_state, -p, state=stop)</F12>
</keyboard>
</global>
<Home>
</Home>
</keymap>
限制
目前,heospy无法监听来自HEOS播放器的事件。事件在规范中描述。如果您有兴趣帮助,请与我联系。
致谢
- 最初的代码来自https://github.com/mrjohnsen/heos-python
- SSDS发现库来自https://gist.github.com/dankrause/6000248,Adam Baxter对其进行了修改以使其在Python 3上工作。
项目详情
下载文件
下载您平台所需的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。