Skip to main content

SoCo

SoCo (Sonos Controller) is a Python project that allows you to programmatically control Sonos speakers. It was originally created at Music Hack Day Sydney by Rahim Sonawalla and is now developed by a team of people at its GitHub repository

For more background on the project, please see Rahim’s blog post.

Visit the SoCo documentation for a more detailed overview of all the functionailty.

Build Status Requirements Status Latest PyPI version

WARNING

Sonos has changed the way music service account information is available. This means that currently a group of music service will give authentication issues and cannot be used at all. Known members of this group are: Google Play Music, Apple Music, Amazon Music, Spotify and Napster.

Issue #557 is a meta issue for this problem and you can use that to track progress on solving the issues, but please refrain from posting “me too” comments in there. Also, there is no need to open any more separate issue about this.

If you have another music service that should be on the list, comment in #557

Installation

SoCo requires Python 2.7, or 3.4 or newer.

Use pip:

pip install soco

SoCo depends on the Requests HTTP library. If you use pip to install Soco, Requests will be installed automatically for you. If not, you can use:

pip install requests

Basic Usage

You can interact with a Sonos Zone Player through a SoCo object. If you know the IP address of a Zone Player, you can create a SoCo object directly:

>>> from soco import SoCo
>>> my_zone = SoCo('192.168.1.101')
>>> my_zone.player_name
Kitchen
>>> my_zone.status_light = True
>>> my_zone.volume = 6

But perhaps the easiest way is to use the module-level discover function. This will find all the Zone Players on your network, and return a python set containing them:

>>> import soco
>>> for zone in soco.discover():
...        print zone.player_name
Living Room
Kitchen

If you prefer a list to a set:

>>> zone_list = list(soco.discover())
>>> zone_list
[SoCo("192.168.1.101"), SoCo("192.168.1.102")]
>>> zone_list[0].mute = True

Of course, you can also play music!

#!/usr/bin/env python
from soco import SoCo

if __name__ == '__main__':
    sonos = SoCo('192.168.1.102') # Pass in the IP of your Sonos speaker
    # You could use the discover function instead, if you don't know the IP

    # Pass in a URI to a media file to have it streamed through the Sonos
    # speaker
    sonos.play_uri(
        'http://ia801402.us.archive.org/20/items/TenD2005-07-16.flac16/TenD2005-07-16t10Wonderboy.mp3')

    track = sonos.get_current_track_info()

    print track['title']

    sonos.pause()

    # Play a stopped or paused track
    sonos.play()

Support

If you need support for SoCo, feel free to post your question either on our Google Group or on the #soco IRC channel on freenode.

Example Applications

To show off what can be made with SoCo, a simple web application is included in the examples folder.

Screenshot of web app

Screenshot of web app

Features

SoCo supports the following controls amongst others:

  • Play, Pause, Stop

  • Next track, Previous track

  • Volume get and set

  • Mute (or unmute)

  • Get current transport information (if speaker is playing, paused or stopped)

  • Get information about the currently playing track

    • Track title

    • Artist

    • Album

    • Album Art (if available)

    • Track length

    • Duration played (for example, 30 seconds into a 3 minute song)

    • Playlist position (for example, item 5 in the playlist)

    • Track URI

  • Receive events when the player state changes

  • Search for and play music items:

    • Local music library

    • Webradio via TuneIn and music services (still unstable)

    • Saved Sonos favorites, favorite radio stations and shows

  • Switch the speaker’s source to line-in or TV input (if the Zone Player supports it)

  • Manage the Sonos queue:

    • Get the items in the queue

    • Add items to the queue

    • Clear the queue

    • Play a specific song from the queue

  • Join or unjoin speakers from a group

  • Put all Sonos speakers in a network into “party mode”.

  • Get or set alarms

  • Get or set sleep timers

  • Get or set the speaker’s bass and treble EQ

  • Toggle the speaker’s loudness compensation, night mode and dialog mode

  • Toggle the white status light on the unit

  • Get the speaker’s information

    • Zone Name

    • Zone Icon

    • UID (usually something like RINCON_XXXXXXXXXXXXXXXXX)

    • Serial Number

    • Software version

    • Hardware version

    • MAC Address

  • Set the speaker’s Zone Name

  • Start a music library update and determine if one is in progress

SoCo also supports lower level access from Python to all Sonos services (e.g. ContentDirectory or RenderingControl).

Google Group

There is a Soco group over at Google Groups. Feel free to drop by for support, ideas or casual conversation related to SoCo.

License

SoCo is released under the MIT license.

Release files for soco 0.15

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for soco 0.15
File Size Uploaded
soco-0.15.tar.gz 663.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for soco 0.15
File Interpreter ABI Platform
soco-0.15-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 778.4 kB

Release files / soco-0.15.tar.gz

Download URL soco-0.15.tar.gz
Size 663.3 kB
Tags Source
SHA-256 checksum
How to use checksums
e04d81cc9661691a358a293912cd3a7fad3904f809f47d25d0f6257adaba7da1
BLAKE2b-256 checksum
How to use checksums
8923ca6893bf11e805c6a5f2fa386e267928d74773180500731dfece1db69eba
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / soco-0.15-py2.py3-none-any.whl

Download URL soco-0.15-py2.py3-none-any.whl
Size 115.1 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
5a810e965f375676aae7d5105c779ed1407612b57e9500f0f60ab859d44fadc9
BLAKE2b-256 checksum
How to use checksums
a13951d65b12e7be8fb2e2709893bd0635f605d5c331c5c5fe4141bc64434bb8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

0.31.4

2 release files

0.31.3

2 release files

0.31.2

2 release files

0.31.1

2 release files

0.30.9

2 release files

0.30.8

2 release files

0.30.7

2 release files

0.30.5

2 release files

0.30.3

2 release files

0.30.2

2 release files

0.30.1

2 release files

0.30.0

2 release files

0.29.1

2 release files

0.28.1

2 release files

0.28.0

2 release files

0.27.1

2 release files

0.27.0

2 release files

0.26.3

2 release files

0.26.0

2 release files

0.25.2

2 release files

0.25.1

2 release files

0.24.1

2 release files

0.23.2

2 release files

0.23.1

2 release files

0.23.0

2 release files

0.22.6

2 release files

0.22.3

2 release files

0.22.1

2 release files

0.22.0

2 release files

0.21.3

2 release files

0.21.2

2 release files

0.21.1

2 release files

0.21

2 release files

0.20

2 release files

0.19

2 release files

0.18.1

2 release files

0.18

2 release files

0.17

2 release files

0.16

2 release files

This release

0.15 This release

2 release files

0.14

2 release files

0.13

2 release files

0.12

2 release files

0.11.1

2 release files

0.11

2 release files

0.10

2 release files

0.9

2 release files

0.8

2 release files

0.7

1 release file

0.6

1 release file

0.2

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page