import atexit
from struct import Struct
from socket import socket, AF_INET, SOCK_DGRAM
from itertools import chain
WLED_ADDR = ("192.168.0.215", 21324)
sock = socket(AF_INET, SOCK_DGRAM)
atexit.register(sock.close)
def set_leds(colors, addr=WLED_ADDR):
if len(colors) > 490:
raise ValueError("Too many LEDs")
leds = chain.from_iterable(colors)
data_len = len(colors) * 3
proto = 2
delay = 10
# Protokoll 2 == RGB
# Protokoll, Timeout, [Rn,Gn,Bn], ...
st = Struct(f"!BB{data_len}B")
sock.sendto(st.pack(proto, delay, *leds), WLED_ADDR)
def set_level(value, /, min_value=0, max_value=140, leds=72):
relative = (value - min_value) / (max_value - min_value)
on_count = round(relative * leds)
off_count = leds - on_count
r = min(255, max(0, int(relative * 255)))
g = 0
b = 255 - r
color = (r , g , b)
colors = [color] * on_count + [(0, 0, 0)] * off_count
set_leds(colors)
if __name__ == "__main__":
try:
while True:
set_level(float(input("Value: ")))
except KeyboardInterrupt:
pass
except ValueError:
pass
Comments
0 B
|👍
/👎