-
Notifications
You must be signed in to change notification settings - Fork 463
/
Copy pathcontrol.py
executable file
·75 lines (61 loc) · 2.45 KB
/
control.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/usr/bin/env python
import sys
import telnetlib
import json
if len(sys.argv) < 3:
print("usage: control.py <SERVER HOST> [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 <SERVER HOST> setVolume <HOSTNAME> [+/-]<VOLUME>")
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 <SERVER HOST> setName <MAC> <NAME>")
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