Events

You can receive events about changes on the Sonos network.

The soco.services.Service.subscribe() method of a service now returns a soco.events.Subscription object. To unsubscribe, call the soco.events.Subscription.unsubscribe() method on the returned object.

Each subscription has its own queue. Events relevant to that subscription are put onto that queue, which can be accessed from subscription.events.get().

Some XML parsing is done for you when you retrieve an event from the event queue. The get and get_nowait methods will return a dict with keys which are the evented variables and values which are the values sent by the event.

Example

try:
    from queue import Empty
except:  # Py2.7
    from Queue import Empty

import soco
from soco.events import event_listener
import logging
logging.basicConfig(level=logging.DEBUG)
# pick a device
device = soco.discover().pop()
# Subscribe to ZGT events
sub = device.zoneGroupTopology.subscribe()

# print out the events as they arise
while True:
    try:
        event = sub.events.get(timeout=0.5)
        print(event)
        print(event.sid)
        print(event.seq)

    except Empty:
        pass
    except KeyboardInterrupt:
        sub.unsubscribe()
        event_listener.stop()
        break