Soco,暂停小组

时间:2015-09-07 17:19:03

标签: python sonos

我正在尝试使用python 3创建自己的歌曲应用程序。我已经从pip3命令安装了SoCo。我目前有这个脚本(名为find.py)。

import time, soco, sys
def search_for_speaker(speaker_name):
    global zone_list
    zone_list = list(soco.discover())

    for speaker in zone_list:
        if speaker.player_name == speaker_name:
            global player
            player = speaker

search_for_speaker(sys.argv[1])
player.pause()
time.sleep(1)
player.play()

我家里的发言人叫HallwayKitchenLiving RoomHallwayKitchen属于一个群组,而Living Room是独立的。

当我运行python3 find.py Living\ Room时,脚本会暂停说话者然后再次播放。当我运行python3 find.py Kitchen时也是如此。问题是我尝试python3 find.py Hallway时。我最终得到了这个错误。

Traceback (most recent call last):
  File "find.py", line 12, in <module>
    player.pause()
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/soco/core.py", line 94, in inner_function
    raise SoCoSlaveException(message)
soco.exceptions.SoCoSlaveException: The method or property "pause" can only be called/used on the coordinator in a group

我想这是因为演讲者kitchen是&#39;主人&#39;扬声器,而走廊&#39;一个不是&#39;。

我需要做些什么才能让它发挥作用?我希望能够在赛道上播放/暂停前一个/上一个并改变音量。

我知道我可以在运行脚本时更改扬声器的名称但是我不会通过命令行运行它,而是来自Better Touch Tool Remote(iOS)

1 个答案:

答案 0 :(得分:3)

答案是例外:当Sonos玩家被分组时,一个玩家具有&#34;组协调员&#34;的特殊角色。所有影响整个组状态的命令都需要发送给组协调器。在SoCo中,您可以通过调用

来实现
player.group.coordinator.play()

免责声明:SoCo是(一个很棒的库)并且不受Sonos支持或认可。