import socket import requests import sys def getMyIP(): # ip = socket.gethostbyname(socket.gethostname()) s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) try: # doesn't even have to be reachable s.connect(('10.255.255.255', 1)) ip = s.getsockname()[0] except: ip = '127.0.0.1' finally: s.close() ip = [int(part) for part in ip.split(".")] return ip def isBluesound(host, timeout=0.3): try: return requests.get("http://"+host+":11000/Status", timeout=timeout).status_code == 200 except: return False def scanNetwork(printProgress=False): bluesounds = [] ip = getMyIP() for i in range(256): hostIP = ".".join(str(p) for p in ip[:-1]) + "." + str(i) sys.stdout.write("\tProgress = "+ str(i)+"/255\t\r") sys.stdout.flush() if(isBluesound(hostIP)): bluesounds.append(hostIP) return bluesounds def sendRequest(host, reqName, reqParameters = None): reqUrl = "http://"+host+":11000/"+reqName if(reqParameters is not None and len(reqParameters) > 0): reqUrl += "?" for k, v in reqParameters.items(): reqUrl += k+"="+v+"&" reqUrl = reqUrl[:-1] response = requests.get(reqUrl) return response def sendRequestToAll(hosts, reqName, reqParameters = None): responses = {} for host in hosts: response = sendRequest(host, reqName, reqParameters) responses[host] = response return responses def sendFuncToAll(hosts, func): responses = {} for host in hosts: responses[host] = func(host) return responses def playNyan(host): nyanUrl="https://www.albinoblacksheep.com/audio/mp3/Nyanyanyanyanyanyanya.mp3" return sendRequest(host, "Play", {"url":nyanUrl}) print("Scanning the network...") bluesounds = scanNetwork() print("Found", len(bluesounds), "bluesound(s):", bluesounds) print("\nSending request:") # responses = sendRequestToAll(bluesounds, "Pause") responses = sendFuncToAll(bluesounds, playNyan) for host, response in responses.items(): print("\t", host) print("\t\t"+response.text.replace("\n", "\n\t\t"))