turris-colors/slave.py
2019-10-25 13:54:00 +02:00

104 lines
2.6 KiB
Python

import socket
import sys
ledNames = [
"power",
"lan0",
"lan1",
"lan2",
"lan3",
"lan4",
"wan",
"pci1",
"pci2",
"pci3",
"user1",
"user2"
]
def eprint(*args, **kwargs):
print(*args, file=sys.stderr, **kwargs)
def setLed(index, color):
try:
red = int(color[0])
green = int(color[1])
blue = int(color[2])
file = open("/sys/class/leds/omnia-led:{}/color".format(ledNames[index]), "w")
file.write("{} {} {}".format(red, green, blue))
except ValueError as error:
eprint(error)
raise Exception("Wrong color values")
except KeyError as error:
eprint(error)
raise Exception("Wrong color values")
else:
eprint("Red: {}, Green: {}, Blue: {}".format(red,green,blue))
finally:
file.close()
def handleData(data):
databyline = data.split("\n")
try:
for i in range(len(databyline)):
if len(databyline[i].strip()) is 0:
continue
setLed(i, databyline[i].strip().split(" "))
except Exception:
return 1
else:
return 0
def setAutonomous(data):
pass
# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Bind the socket to the port
server_address = ('0.0.0.0', 10000)
try:
sock.bind(server_address)
except OSError:
server_address = ('0.0.0.0', 10001)
sock.bind(server_address)
eprint("Server started on {} on port {}".format(server_address[0], server_address[1]))
# Listen for incoming connections
sock.listen(1)
while True:
# Wait for a connection
eprint('waiting for connection')
conn, client_address = sock.accept()
try:
eprint('connection from {}'.format(client_address))
while True:
allData = "";
while True:
data = conn.recv(1024)
if not data:
break
allData+=data.decode('utf-8')
if allData.find('\n\n') > -1:
break
eprint('all data: {}'.format(allData))
if not handleData(allData) is 0:
conn.sendall("error".encode('utf-8'))
else:
conn.sendall("OK".encode('utf-8'))
except BrokenPipeError:
eprint("connection from {} has broken a pipe.".format(client_address))
conn.close()
except ConnectionResetError:
eprint("connection from {} reset.".format(client_address))
conn.close()
finally:
# Clean up the connection
conn.close()