initial commit

- added readme
- added recharge scripts
- added dots simple test script
- added images, transitions and animations script
This commit is contained in:
KS_HTK 2025-08-20 23:15:15 +02:00
commit 666a377e32
Signed by: KS_HTK
GPG key ID: B78139943FC60E2D
7 changed files with 404 additions and 0 deletions

87
recharge.py Normal file
View file

@ -0,0 +1,87 @@
"""
Script for the flipdot recharge party animation
"""
# requires: python-fluepdot, python_dotenv
import os
from time import sleep
from dotenv import load_dotenv
from fluepdot import Fluepdot, Mode
logo = """
X
XXXXXXXXXXXX XX XXXXXXXXXXX
XX XXX XX
X XXX X
X XXXX X
X XXXXXXXX XX
X XXXXXXXX XX
X XXXX X
X XXX X
XX XXX XX
XXXXXXXXXXX XX XXXXXXXXXXXX
X
"""
# convert text to framebuffer format
def textToFramebuffer(text: str, x:int=0, y:int=0, fontname:str="DejaVuSans.ttf", size:int=14) -> str:
from PIL import Image, ImageFont, ImageDraw
font = ImageFont.truetype(fontname, size)
tw, th = font.getsize(text)
while th >= 16:
print(th)
size -= 1
font = ImageFont.truetype(fontname, size)
tw, th = font.getsize(text)
img = Image.new("1", (tw, 16), 0)
draw = ImageDraw.Draw(img)
draw.text((0, 0), text=text, font=font, fill=1)
framebuffer: str = ""
for y in range(img.height):
for x in range(img.width):
framebuffer += "X" if img.getpixel((x, y)) == 1 else " "
framebuffer += "\n"
return framebuffer
def scrl_frm(frame, loop: bool or int = False) -> None:
def _extend_frame(line: str) -> str:
return line+(" "*loop)+line[0:115]
def _pad_frame(line: str) -> str:
pad = " "*115
return pad+line+pad
frame = frame.split("\n")
length = len(frame[0])+loop if type(loop) == int else len(frame[0])+115
if type(loop) == int:
frame = list(map(_extend_frame, frame))
else:
frame = list(map(_pad_frame, frame))
_run_once=True
while loop or type(loop)==int or _run_once:
_run_once=False
for i in range(0, length, 2):
print(".\n".join(l[i:i+115] for l in frame))
sleep(.1)
if __name__=="__main__":
load_dotenv()
hostname = os.getenv("DOTS_HOST")
frame = textToFramebuffer("recharge! flipdot e.V.", fontname="DejaVuSans.ttf")
fd = Fluepdot(f"http://{hostname}")
fd.set_mode(Mode.DIFFERENTIAL)
logoarr = logo.split("\n")
nframe = ""
for y in range(len(logoarr)):
nframe += logoarr[y] + frame.split("\n")[y]+ "\n"
nframe = nframe[:-1]
print(nframe)
fd.post_scroll_frame_raw(nframe, loop=2)
#scrl_frm(nframe, loop=2)