SoCo 0.8 release notes

New Features

  • Re-added support for Python 2.6 (#154)
  • Added SoCo.get_sonos_playlists() (#114)
  • Added methods for working with speaker topology
  • soco.SoCo.group retrieves the soco.groups.ZoneGroup to which the speaker belongs (#132). The group itself has a soco.groups.ZoneGroup.member attribute returning all of its members. Iterating directly over the group is possible as well.

  • Speakers can be grouped using soco.SoCo.join() (#136):

    z1 = SoCo('192.168.1.101')
    z2 = SoCo('192.168.1.102')
    z1.join(z2)
    
  • soco.SoCo.all_zones and soco.SoCo.visible_zones return all and all visible zones, respectively.

  • soco.SoCo.is_bridge indicates if the SoCo instance represents a bridge.

  • soco.SoCo.is_coordinator indicates if the SoCo instance is a group coordinator (#166)

  • A new soco.plugins.spotify.Spotify plugin allows querying and playing the Spotify music catalogue (#119):

    from soco.plugins.spotify import Spotify
    from soco.plugins.spotify import SpotifyTrack
    # create a new plugin, pass the soco instance to it
    myplugin = Spotify(device)
    print 'index: ' + str(myplugin.add_track_to_queue(SpotifyTrack('
        spotify:track:20DfkHC5grnKNJCzZQB6KC')))
    print 'index: ' + str(myplugin.add_album_to_queue(SpotifyAlbum('
        spotify:album:6a50SaJpvdWDp13t0wUcPU')))
    
  • A soco.data_structures.URI item can be passed to add_to_queue which allows playing music from arbitrary URIs (#147)

    import soco
    from soco.data_structures import URI
    
    soc = soco.SoCo('...ip_address...')
    uri = URI('http://www.noiseaddicts.com/samples/17.mp3')
    soc.add_to_queue(uri)
    
  • A new include_invisible parameter to soco.discover() can be used to retrieve invisible speakers or bridges (#146)

  • A new timeout parameter to soco.discover(). If no zones are found within timeout seconds None is returned. (#146)

  • Network requests can be cached for better performance (#131).

  • It is now possible to subscribe to events of a service using its subscribe() method, which returns a Subscription object. To unsubscribe, call the unsubscribe method on the returned object. (#121, #130)

  • Support for reading and setting crossfade (#165)

Improvements

  • Performance improvements for speaker discovery (#146)
  • Various improvements to the Wimp plugin (#140).
  • Test coverage tracking using coveralls.io (#163)

Backwards Compatability

  • Queue related use 0-based indexing consistently (#103)
  • soco.SoCo.get_speakers_ip() is deprecated in favour of soco.discover() (#124)