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