99 lines
2.8 KiB
Python
99 lines
2.8 KiB
Python
import uuid
|
|
import typing
|
|
|
|
class RGBStrip:
|
|
# name = the name off the the strip, defined by the client connecting to the server
|
|
# uid = unique id, if the strip sends one, use this (later maybe, or never, whatever)
|
|
# lenght = the lenght off the strip, for future use of eg WS2812b strips, will be 1 by default
|
|
STRIP_NAME: str
|
|
STRIP_LENGHT: int
|
|
def __init__(self,name: str,onValuesUpdateHandler: object,lenght: int=1,address: typing.Tuple[str,int] = ("0.0.0.0",0000)):
|
|
# UID should be updateable later, or not?
|
|
# when updating, be sure it does not exist
|
|
self.STRIP_UID = str(uuid.uuid4())
|
|
self.STRIP_NAME = name
|
|
self.STRIP_LENGHT = lenght
|
|
self.address = address
|
|
|
|
self.onValuesUpdateHandler = onValuesUpdateHandler
|
|
|
|
self.red = [0]*self.STRIP_LENGHT
|
|
self.green = [0]*self.STRIP_LENGHT
|
|
self.blue = [0]*self.STRIP_LENGHT
|
|
|
|
def RGB(self,red: int,green: int,blue: int,brightness: int = 100):
|
|
|
|
if(red < 0):
|
|
red = 0
|
|
if(red > 255):
|
|
red = 255
|
|
|
|
if(green < 0):
|
|
green = 0
|
|
if(green > 255):
|
|
green = 255
|
|
|
|
if(blue < 0):
|
|
blue = 0
|
|
if(blue > 255):
|
|
blue = 255
|
|
|
|
if(brightness < 0):
|
|
brightness = 0
|
|
if(brightness > 100):
|
|
brightness = 100
|
|
|
|
for x in range(self.STRIP_LENGHT):
|
|
self.red[x] = int(red/100*brightness)
|
|
self.green[x] = int(green/100*brightness)
|
|
self.blue[x] = int(blue/100*brightness)
|
|
|
|
self.show()
|
|
|
|
def WS2812b(self,id,red,green,blue,brightness=100):
|
|
if id < 0 and id > self.STRIP_LENGHT:
|
|
print(self.STRIP_NAME," is max ",self.STRIP_LENGHT," Pixels long!")
|
|
return
|
|
else:
|
|
if(red < 0):
|
|
red = 0
|
|
if(red > 255):
|
|
red = 255
|
|
|
|
if(green < 0):
|
|
green = 0
|
|
if(green > 255):
|
|
green = 255
|
|
|
|
if(blue < 0):
|
|
blue = 0
|
|
if(blue > 255):
|
|
blue = 255
|
|
|
|
if(brightness < 0):
|
|
brightness = 0
|
|
if(brightness > 100):
|
|
brightness = 100
|
|
|
|
self.red[id] = int(red/100*brightness)
|
|
self.green[id] = int(green/100*brightness)
|
|
self.blue[id] = int(blue/100*brightness)
|
|
|
|
def show(self):
|
|
self.onValuesUpdateHandler(self)
|
|
|
|
|
|
def off(self):
|
|
for x in range(self.STRIP_LENGHT):
|
|
self.red[x] = 0
|
|
self.green[x] = 0
|
|
self.blue[x] = 0
|
|
|
|
self.onValuesUpdateHandler(self)
|
|
|
|
def getData(self):
|
|
return [self.red,self.green,self.blue]
|
|
|
|
|
|
|