fluepdot-scripts/recharge2.py

85 lines
2.4 KiB
Python
Raw Normal View History

"""
Alternative animation for the flipdot recharge party
"""
# requires: python-fluepdot, python-dotenv
import os
from dotenv import load_dotenv
from fluepdot import Fluepdot, Mode
from time import sleep
battery = [
" XXXXXXXXXXXX XXXXXXXXXXX ",
"XX XX ",
"X X ",
"X X ",
"X XX",
"X XX",
"X X ",
"X X ",
"XX XX ",
" XXXXXXXXXXX XXXXXXXXXXXX "]
lightning = [" X ",
" XX ",
" XXX ",
" XXX ",
" XXXX ",
"XXXXXXXX "]
def get_lightning(level: int) -> str:
if level < 0:
level = 0
elif level > 12:
level = 12
rtn = "\n".rjust(19) + "\n".rjust(19)
for i in range(0, level):
line = lightning[i] if i < len(lightning) else lightning[len(lightning) - i - 1][::-1]
rtn = line.rjust(19) + "\n" + rtn
while rtn.count("\n") < 16:
rtn = "\n".rjust(19) + rtn
return rtn
def get_battery(level: int) -> str:
lightning = get_lightning(level).split("\n")[:-1]
rtn = ""
for ln in range(0, len(lightning)):
if ln < 3:
rtn += lightning[ln].ljust(30)
elif ln > 2 + len(battery):
rtn += lightning[ln].ljust(30)
else:
for cind in range(0, len(battery[0])):
try:
rtn += "X" if battery[ln - 3][cind] == "X" or lightning[ln][cind] == "X" else " "
except IndexError:
rtn += " "
rtn += "\n"
return rtn
if __name__ == "__main__":
load_dotenv()
hostname = os.getenv("DOTS_HOST")
fd = Fluepdot(f"http://{hostname}")
fd.set_mode(Mode.DIFFERENTIAL)
l, h = fd.get_size()
while True:
for i in range(0, len(lightning) * 2):
bat = get_battery(i).split("\n")[:-1]
bat = list(map(lambda x: x.rjust(l), bat))
bat = "\n".join(bat) + "\n"
fd.post_frame_raw(frame=bat)
sleep(.5)
for i in range(len(lightning) * 2, 0, -1):
bat = get_battery(i).split("\n")[:-1]
bat = list(map(lambda x: x.rjust(l), bat))
bat = "\n".join(bat) + "\n"
fd.post_frame_raw(frame=bat)
sleep(.5)