74 lines
2.0 KiB
Python
74 lines
2.0 KiB
Python
import datetime
|
|
import time
|
|
from threading import Thread
|
|
import numpy as np
|
|
|
|
from . import hardware, helpers
|
|
|
|
|
|
class ClockFace:
|
|
"""Actual functions one might need for a clock"""
|
|
|
|
def __init__(self):
|
|
""""""
|
|
# added by the launcher, we have self.modules (dict)
|
|
|
|
self.IO = hardware.led.get_handler()
|
|
self.shape = self.IO.shape # (16,32) for now
|
|
# TODO handle differently!
|
|
self.MOP = helpers.computations.MatrixOperations()
|
|
|
|
self.kill_output = False
|
|
|
|
def start(self):
|
|
# helpers.timer.RepeatedTimer(60, self.clock_loop)
|
|
# # schedule for in 60 seconds
|
|
Thread(target = self.clock_loop).start()
|
|
|
|
|
|
# TODO Turn off when button pressed?
|
|
|
|
def clock_loop(self):
|
|
t_start = datetime.datetime.now()
|
|
|
|
t_minutes = int(datetime.datetime.now().strftime("%H%M"))
|
|
|
|
has_queue, data = self.modules["receive"].fetch_data()
|
|
self.set_brightness()
|
|
|
|
if data == {}:
|
|
matrices = self.MOP.get_fallback()
|
|
else:
|
|
matrices = [np.asarray(d).astype(int) for d in data["matrices"]]
|
|
|
|
if not self.kill_output:
|
|
self.IO.put(matrices)
|
|
else:
|
|
z = np.zeros((16,16,3))
|
|
self.IO.put([z,z,z])
|
|
|
|
if has_queue:
|
|
tnext = 1
|
|
else:
|
|
tnext = 30
|
|
|
|
|
|
t_end = datetime.datetime.now()
|
|
delta_planned = datetime.timedelta(seconds = tnext)
|
|
delta = delta_planned - (t_end - t_start)
|
|
|
|
time.sleep(max(delta.total_seconds(), 0))
|
|
self.clock_loop()
|
|
|
|
|
|
def set_brightness(self):
|
|
"""Kill the brightness at night"""
|
|
|
|
is_WE = datetime.datetime.now().weekday() > 4
|
|
now = int(datetime.datetime.now().strftime("%H%M"))
|
|
if (is_WE and (now > 1000 and now < 2200)) or ((not is_WE) and (now > 830 and now < 2130)):
|
|
self.kill_output = False
|
|
else:
|
|
self.kill_output = True
|
|
|