DeaD_EyE icon

wled.py

DeaD_EyE | PRO | 03/02/24 10:32:23 PM UTC | 0 ⭐ | 1878 👁️ | Never ⏰ | []
Python |

1.17 KB

|

None

|

0 👍

/

0 👎

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

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎