Beispiel #1
0
def main():
    sd = SonosDiscovery()
    speakers = sd.get_speaker_ips()

    if not speakers:
        print 'no speakers found, exiting.'
        return

    soco = SoCo(speakers[0])

    # get a plugin by name (eg from a config file)
    myplugin = SoCoPlugin.from_name('soco.plugins.example.ExamplePlugin', soco,
                                    'some user')

    # do something with your plugin
    print 'Testing', myplugin.name
    myplugin.music_plugin_play()

    time.sleep(5)

    # create a plugin by normal instantiation
    from soco.plugins.example import ExamplePlugin

    # create a new plugin, pass the soco instance to it
    myplugin = ExamplePlugin(soco, 'a user')

    print 'Testing', myplugin.name

    # do something with your plugin
    myplugin.music_plugin_stop()
Beispiel #2
0
    def connect(self):
        ips = []
        while (len(ips) == 0):
            print "No Sonos found"
            sonos_devices = SonosDiscovery()
            ips = sonos_devices.get_speaker_ips()

        print "Found {0} device(s)".format(len(ips))

        for ip in ips:
            self._device = SoCo(ip)
            zone_name = self._device.get_speaker_info()['zone_name']
            print "IP of {0} is {1}".format(zone_name, ip)
Beispiel #3
0
    def __init__(self):
        self.logger = logging.getLogger(__name__)
        self.logger.setLevel(logging.DEBUG)
        fmt = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
        fmt = logging.Formatter(fmt)

        # Configuring logging to file
        # Currently logs everything DEBUG and above
        logfile = logging.FileHandler('clock.log')
        logfile.setLevel(logging.DEBUG)
        logfile.setFormatter(fmt)
        self.logger.addHandler(logfile)

        # Configuring logging to stdout
        # Currently logs everything INFO and above:w
        stderr_handle = logging.StreamHandler()
        stderr_handle.setLevel(logging.INFO)
        stderr_handle.setFormatter(fmt)
        self.logger.addHandler(stderr_handle)

        self.logger.info('Starting log...')

        # Time variables
        self._then = ''

        # Player variables
        self._ZONE_IPS = []

        self.logger.info('Searching for zones...')
        disc = SonosDiscovery()

        self.household = {}

        self.logger.info('Building household tree...')
        for ip in disc.get_speaker_ips():
            device = SoCo(ip)
            try:
                zone = device.get_speaker_info()['zone_name']
                if zone != None:
                    if self.household.has_key(zone):
                        self.household[zone].append(ip)
                    else:
                        self.household[zone] = []
                        self.household[zone].append(ip)
            except ValueError:
                msg = 'Zone with no name at ' + ip + ', possibly a bridge'
                self.logger.error(msg)
                continue
Beispiel #4
0
    def __init__(self):
        # Time variables
        self._then = ''

        # Player variables
        self._ZONE_IPS = []

        disc = SonosDiscovery()
        self.household = {}
        for ip in disc.get_speaker_ips():
            device = SoCo(ip)
            try:
                zone = device.get_speaker_info()['zone_name']
                if zone != None:
                    if self.household.has_key(zone):
                        self.household[zone].append(ip)
                    else:
                        self.household[zone] = []
                        self.household[zone].append(ip)
            except ValueError:
                continue
Beispiel #5
0
        colorama.deinit()


if __name__ == '__main__':
    if (len(sys.argv) > 4 or len(sys.argv) < 3):
        print("Usage: sonoshell.py [speaker's IP|all] [cmd]")
        print("")
        print("Valid commands (with IP): info, play, pause, stop, next, previous, current, queue, volume and partymode")
        print("Valid commands (with 'all'): list_ips")
        sys.exit()

    speaker_spec = sys.argv[1]
    cmd = sys.argv[2].lower()

    if speaker_spec == "all":
        sonos = SonosDiscovery()
        if (cmd == 'list_ips'):
            print('\n'.join(sonos.get_speaker_ips()))
        else:
            print("Valid commands (with 'all'): list_ips")
    else:
        sonos = SoCo(speaker_spec)
        if (cmd == 'partymode'):
            print(sonos.partymode())
        elif (cmd == 'info'):
            all_info = sonos.get_speaker_info()
            for item in all_info:
                print("%s: %s" % (item, all_info[item]))
        elif (cmd == 'play'):
            print(sonos.play())
        elif (cmd == 'pause'):
Beispiel #6
0
def get_devices():
    ips = set()
    for ip in SonosDiscovery().get_speaker_ips():
        ips.add(ip)

    return [SoCo(ip) for ip in ips]
Beispiel #7
0
#!/usr/bin/env python

#should be used with vkey_sketch3.ino

from time import sleep
from soco import SoCo
from soco import SonosDiscovery
import serial

#####ser = serial.Serial("/dev/ttyACM0", 9600, timeout=1)
#ser = serial.Serial("/dev/ttyACM0", 9600, timeout=0.5)
#ser = serial.Serial("COM19", 9600, timeout=0.5)

DEBUG = 1

sonos_devices = SonosDiscovery()

speakers = {SoCo(ip).player_name: SoCo(ip) for ip in sonos_devices.get_speaker_ips()}

# As far as I can tell player_name == get_speaker_info()['zone_name]    
for name,speaker in speakers.items():
    a = speaker.get_current_track_info()['artist']
    #print "player_name: {}; ip: {}; zone name: {}; artist: {}".format(name, speaker.speaker_ip, speaker.get_speaker_info()['zone_name'], a)
    print "player_name: {}; ip: {}; artist: {}".format(name, speaker.speaker_ip, a)
    
    # using the presence of an artist to decide that is the master speaker - seems to work
    if a:
        master = speaker  


print "\nmaster speaker = {}: {}".format(master.player_name,master.speaker_ip)