跳转到主要内容

使用Python脚本控制HEOS播放器

项目描述

使用Python脚本控制HEOS播放器

PyPI version

需求

您在本地网络中有一个HEOS扬声器,并且安装了Python 3。

用法

  1. 使用pip install heospy安装软件包(从PyPI的最新发布版)或pip install git+https://github.com/ping13/heospy.git(如果您想使用最新的git版本)。您还可以下载源代码包,并运行pip install .

  2. 创建一个config.json文件,该文件可能位于名为$HOME/.heospy/的目录中,或者位于环境变量$HEOSPY_CONF指定的目录中。您还可以通过-c直接指定配置文件。该配置文件包含您要控制的HEOS播放器的名称以及您的HEOS账户的用户名和密码。请参阅example-config.json以获取示例。

  3. 首次运行脚本以查看其如何工作

     $ 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
     $
    
  4. 现在您可以调用任何来自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一起使用

使用HomebridgeHomebridge 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播放器的事件。事件在规范中描述。如果您有兴趣帮助,请与我联系。

致谢

项目详情


下载文件

下载您平台所需的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

heospy-0.2.7.tar.gz (22.0 kB 查看散列值)

上传时间

构建分发

heospy-0.2.7-py3-none-any.whl (16.4 kB 查看散列值)

上传时间 Python 3

由...