34 lines
1.3 KiB
Python
34 lines
1.3 KiB
Python
from random import randint
|
|
import time
|
|
import socket
|
|
|
|
class UDPListner:
|
|
lastping = time.time()-1
|
|
|
|
def __init__(self, rgbStrip, remoteaddr):
|
|
self.rgbStrip = rgbStrip
|
|
self.remoteaddr = remoteaddr
|
|
self.localaddr = ("",randint(6000,7000))
|
|
self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
|
|
self.socket.settimeout(.002)
|
|
|
|
def loop(self):
|
|
#print(time.time() - self.lastping)
|
|
if time.time() - self.lastping > .5 :
|
|
self.socket.sendto("s:ping".encode(), self.remoteaddr)
|
|
self.lastping = time.time()
|
|
try:
|
|
data, address = self.socket.recvfrom(4096)
|
|
data = data.decode('UTF-8')
|
|
#print(data[0],data[1])
|
|
if data:
|
|
if data[0] is "s" and data[1] is "r":
|
|
self.socket.sendto(("r:1:"+self.rgbStrip.STRIP_NAME+":1").encode(), address)
|
|
if data[0] is "d":
|
|
self.rgbStrip.RGB(self.getRgbVal(data,1),self.getRgbVal(data,4),self.getRgbVal(data,7))
|
|
except socket.timeout:
|
|
pass
|
|
|
|
def getRgbVal(self,data,pos):
|
|
return 100*int(data[pos]) + 10*int(data[pos+1]) + int(data[pos+2]) |