fensterbogenbeleuchtung_ani.../animations.py

92 lines
2.2 KiB
Python

from beleuchtung import Beleuchtung
import random
import time
class NoSegmentExists(Exception):
pass
class ColorsMustBeMultipleOfThreeAndMustExist(Exception):
pass
class Fade():
def __init__(self, start, end, step_num):
self.fade_step = (end - start) / step_num
self.current = start
def next(self):
self.current += self.fade_step
return round(self.current)
class SolidColorFadingBetweenFenster(Beleuchtung):
def __init__(self, segments, colors, steps, addr):
if len(segments) == 0:
raise NoSegmentExists
if len(colors) % 3 != 0 or len(colors) == 0:
raise ColorsMustBeMultipleOfThreeAndMustExist
Beleuchtung.__init__(self, segments, addr)
self.colors = colors
self.max_step = steps
self.data = self.generate_new_colors()
self.fader = []
def __del__(self):
for i in self.fader:
del i
def to_hex(self, obj, offset):
return "%02x%02x%02x" % (obj[offset+1], obj[offset], obj[offset+2])
def __iter__(self):
self.step = 0
self.fade_to = self.generate_new_colors()
self.fader = [Fade(self.data[i], self.fade_to[i], self.max_step) for i in range(len(self.data))]
j = 0
for i in range(self.get_num_of_segments()):
print("%d\t#%s\t#%s" % (i, self.to_hex(self.data, j), self.to_hex(self.fade_to, j)))
j += self.segments[i] * 3
return self
def __next__(self):
self.step += 1
if self.step > self.max_step:
for i in self.fader:
del i
raise StopIteration
self.data = []
for i in self.fader:
self.data.append(i.next())
return self.send
def get_num_of_colors(self):
return len(self.colors) / 3
def get_rand_color(self):
i = random.randint(0, self.get_num_of_colors() - 1) * 3
return self.colors[i:i+3]
def generate_new_colors(self):
colors = []
for i in range(self.get_num_of_segments()):
colors += self.get_rand_color() * self.segments[i]
return colors
if __name__ == "__main__":
ambiant_colors = [
0,0xff,0xfb,
0xff,0,0xff,
0,0xcd,0xeb,
0xfe,0xa0,0xd0,
0xce,0xfa,0x2d,
0x90,0x3c,0xee
]
x = SolidColorFadingBetweenFenster([57, 59], ambiant_colors, 1500, [("127.0.0.1", 49152),("172.23.92.15", 49152)])
try:
while True:
for i in x:
i()
time.sleep(1.0/50)
except KeyboardInterrupt:
del x