82 lines
2.1 KiB
Python
82 lines
2.1 KiB
Python
|
"""
|
||
|
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, 12):
|
||
|
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(12, 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)
|