""" 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)