142 lines
4.1 KiB
Python
142 lines
4.1 KiB
Python
#!/usr/bin/env python
|
|
|
|
import board
|
|
import adafruit_dotstar
|
|
import config
|
|
import ast
|
|
from time import sleep
|
|
from math import ceil
|
|
from adafruit_led_animation.helper import PixelSubset
|
|
from adafruit_led_animation.animation.rainbowchase import RainbowChase
|
|
from adafruit_led_animation.animation.pulse import Pulse
|
|
from adafruit_led_animation.animation.comet import Comet
|
|
from adafruit_led_animation.animation.blink import Blink
|
|
from adafruit_led_animation.color import PURPLE
|
|
from adafruit_led_animation.group import AnimationGroup
|
|
from adafruit_led_animation.sequence import AnimationSequence
|
|
|
|
|
|
time_int = 0.5
|
|
|
|
|
|
class KilnStatus:
|
|
def __init__(self, status_fp):
|
|
self.state = 'STARTUP'
|
|
self.heat = False
|
|
self.temp = 0.0
|
|
self.target = 0.0
|
|
self.runtime = 0.0
|
|
self.totaltime = 0.0
|
|
self.delay = 0.5
|
|
self.status_fp = status_fp
|
|
self.speed = 0.1
|
|
|
|
def check_status(self):
|
|
with open(self.status_fp, 'r') as f:
|
|
status = ast.literal_eval(f.readline().strip())
|
|
self.state = status['state']
|
|
self.heat = status['heat']
|
|
self.temp = status['temperature']
|
|
self.target = status['target']
|
|
self.totaltime = status['totaltime']
|
|
self.runtime = status['runtime']
|
|
|
|
# {'runtime': 0,
|
|
# 'temperature': 78.41890624999999,
|
|
# 'target': 0,
|
|
# 'state': 'IDLE',
|
|
# 'heat': 0,
|
|
# 'totaltime': 0,
|
|
# 'kwh_rate': 0.1319,
|
|
# 'currency_type': '$',
|
|
# 'profile': None,
|
|
# 'pidstats': {}}
|
|
|
|
|
|
def update_status(kiln_status):
|
|
"""Monitor button that reverses rainbow direction and changes blink speed.
|
|
Assume button is active low.
|
|
"""
|
|
|
|
kiln_status.check_status()
|
|
|
|
|
|
def task_strip_top(pixels, kiln_status):
|
|
while True:
|
|
if kiln_status.state == 'STARTUP':
|
|
top = RainbowChase(pixels,
|
|
kiln_status.speed,
|
|
size=2,
|
|
spacing=3,
|
|
reverse=False,
|
|
step=8)
|
|
elif kiln_status.state == 'IDLE':
|
|
top = Pulse(pixels,
|
|
kiln_status.speed,
|
|
(135, 135, 135),
|
|
period=5)
|
|
elif kiln_status.state == 'RUNNING':
|
|
top = Comet(pixels,
|
|
kiln_status.speed,
|
|
(120, 200, 180),
|
|
tail_length=10,
|
|
reverse=False,
|
|
bounce=False,
|
|
ring=True)
|
|
elif kiln_status.state == 'EMERGENCY RESET':
|
|
top = Blink(pixels,
|
|
0.7,
|
|
(255, 0, 0))
|
|
return(top)
|
|
|
|
def task_strip_right(pixels, kiln_status):
|
|
r_blink = Blink(pixels, speed=0.5, color=PURPLE)
|
|
return(r_blink)
|
|
|
|
def main():
|
|
|
|
# setup
|
|
|
|
status_fp = config.status_file
|
|
|
|
kiln_status = KilnStatus(status_fp)
|
|
|
|
dotstar_num = config.dotstar_num = 27
|
|
dotstar_clk = config.gpio_dotstar_clk = 19 # pin 35
|
|
dotstar_dat = config.gpio_dotstar_dat = 13 # pin 33
|
|
|
|
pixels = adafruit_dotstar.DotStar(getattr(board, 'D%s' % dotstar_clk),
|
|
getattr(board, 'D%s' % dotstar_dat),
|
|
dotstar_num)
|
|
|
|
substrip_len = ceil(dotstar_num/3.0)
|
|
|
|
strip_left = PixelSubset(pixels,
|
|
0,
|
|
substrip_len)
|
|
|
|
strip_right = PixelSubset(pixels,
|
|
dotstar_num - substrip_len,
|
|
dotstar_num)
|
|
|
|
strip_top = PixelSubset(pixels,
|
|
substrip_len,
|
|
dotstar_num - substrip_len)
|
|
|
|
l_blink = Blink(strip_left, speed=0.5, color=PURPLE)
|
|
|
|
while True:
|
|
# kiln_status.check_status()
|
|
# animations = AnimationSequence(
|
|
# AnimationGroup(
|
|
# l_blink,
|
|
# task_strip_right(strip_right, kiln_status),
|
|
# task_strip_top(strip_top, kiln_status)
|
|
# ))
|
|
# animations.animate()
|
|
l_blink.animate()
|
|
sleep(time_int)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|