#!/usr/bin/env python import sys import telnetlib import json if len(sys.argv) < 3: print("usage: control.py [setVolume|setName]") sys.exit(0) telnet = telnetlib.Telnet(sys.argv[1], 1705) requestId = 1 def doRequest(j, requestId): print("send: " + j) telnet.write(j + "\r\n") while (True): response = telnet.read_until("\r\n", 2) jResponse = json.loads(response) if 'id' in jResponse: if jResponse['id'] == requestId: print("recv: " + response) return jResponse def setVolume(client, volume): global requestId doRequest(json.dumps({'jsonrpc': '2.0', 'method': 'Client.SetVolume', 'params': { 'client': client, 'volume': volume}, 'id': requestId}), requestId) requestId = requestId + 1 def setName(client, name): global requestId doRequest(json.dumps({'jsonrpc': '2.0', 'method': 'Client.SetName', 'params': { 'client': client, 'name': name}, 'id': requestId}), requestId) requestId = requestId + 1 if sys.argv[2] == "setVolume": if len(sys.argv) < 5: print( "usage: control.py setVolume [+/-]") exit(0) volstr = sys.argv[4] j = doRequest(json.dumps( {'jsonrpc': '2.0', 'method': 'Server.GetStatus', 'id': 1}), 1) for client in j["result"]["clients"]: if (sys.argv[3] == client['host']['name'] or sys.argv[3] == 'all'): if (volstr[0] == '+'): volume = int(client['config']['volume'] ['percent']) + int(volstr[1:]) elif (volstr[0] == '-'): volume = int(client['config']['volume'] ['percent']) - int(volstr[1:]) else: volume = int(volstr) setVolume(client['host']['mac'], volume) elif sys.argv[2] == "setName": if len(sys.argv) < 5: print("usage: control.py setName ") exit(0) setName(sys.argv[3], sys.argv[4]) else: print("unknown command \"" + sys.argv[2] + "\"") j = doRequest(json.dumps( {'jsonrpc': '2.0', 'method': 'Server.GetStatus', 'id': 1}), 1) for client in j["result"]["clients"]: print("MAC: " + client['host']['mac'] + ", connect: " + str(client['connected']) + ", volume: " + str( client['config']['volume']['percent']) + ", name: " + client['host']['name'] + ", host: " + client['host']['ip']) telnet.close