from functools import reduce
from stupidArtnet import StupidArtnet
from dataclasses import dataclass, fields
import struct
@dataclass
class ArtnetSceneControlState:
scene_index: int = 0
group_index: int = 0
opacity: int = 0
offset: int = 0
speed_multiplier: int = 127
color_mode: int = 0
pallet_override: int = 0
def __post_init__(self):
for f in fields(self):
v = getattr(self, f.name)
if not (0 <= v <= 255):
raise ValueError(f"{f.name} must be 0-255")
def __bytes__(self):
fmt = f'{len(fields(self))}B'
return struct.pack(fmt, *[getattr(self, f.name) for f in fields(self)])
if __name__ == "__main__":
target_ip = '127.0.0.1' universe = 1337
packet_size = 100
a = StupidArtnet( target_ip, universe, packet_size, 30, True, True )
print(a)
states = [ArtnetSceneControlState() for i in range(10)]
states[0] = ArtnetSceneControlState(scene_index=1, opacity=128)
states[1] = ArtnetSceneControlState(scene_index=0)
states[3] = ArtnetSceneControlState(scene_index=3, offset=128, speed_multiplier=129)
packet = reduce(lambda x, y: x + bytes(y), states, bytearray())
packet.extend(b'\x00' * (packet_size - len(packet)))
print(packet)
a.set(packet)
a.show()