- added pause, continue, restart of receipe
- added signal handler for controlling the controller git-svn-id: http://moon:8086/svn/projects/HendiControl@148 fda53097-d464-4ada-af97-ba876c37ca34
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
import time
|
||||
import signal
|
||||
import json
|
||||
from controller import Controller
|
||||
from mass import Mass
|
||||
@@ -38,6 +38,24 @@ def results_plot(self):
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
def handler(signum, frame):
|
||||
print('Signal handler called with signal', signum)
|
||||
|
||||
if signum == signal.SIGABRT:
|
||||
ablauf.stop()
|
||||
if signum == signal.SIGINT:
|
||||
ablauf.pause()
|
||||
if signum == signal.SIGCONT:
|
||||
ablauf.cont()
|
||||
if signum == signal.SIGHUP:
|
||||
ablauf.restart()
|
||||
|
||||
# Set the signal handler and a 5-second alarm
|
||||
signal.signal(signal.SIGABRT, handler)
|
||||
signal.signal(signal.SIGINT, handler)
|
||||
signal.signal(signal.SIGCONT, handler)
|
||||
signal.signal(signal.SIGHUP, handler)
|
||||
|
||||
fp = open("brewpi.json")
|
||||
configJson = json.load(fp)
|
||||
|
||||
|
||||
@@ -36,6 +36,9 @@ class Controller():
|
||||
self.thread = None
|
||||
self.rast_abort = False
|
||||
self.receipe_sema = threading.Semaphore(0)
|
||||
self.is_pause = False
|
||||
self.is_restart = False
|
||||
self.receipe = None
|
||||
|
||||
def log(self, s):
|
||||
now = time.time()
|
||||
@@ -55,6 +58,8 @@ class Controller():
|
||||
self.report_last_time = now
|
||||
|
||||
def start(self, recipe):
|
||||
self.is_pause = False
|
||||
self.receipe = recipe
|
||||
print(json.dumps({recipe['Name'] : recipe}, indent=4, sort_keys=True))
|
||||
|
||||
self.thread = threading.Thread(target=self.receipe_run, args=(recipe,))
|
||||
@@ -66,6 +71,22 @@ class Controller():
|
||||
self.thread.join()
|
||||
self.thread = None
|
||||
self.rast_abort = False
|
||||
self.receipe = None
|
||||
|
||||
def restart(self):
|
||||
receipe = self.receipe
|
||||
self.is_restart = True
|
||||
self.stop()
|
||||
self.start(receipe)
|
||||
self.is_restart = False
|
||||
|
||||
def pause(self):
|
||||
if self.thread != None:
|
||||
self.is_pause = True
|
||||
|
||||
def cont(self):
|
||||
if self.thread != None:
|
||||
self.is_pause = False
|
||||
|
||||
def wait_finished(self):
|
||||
self.receipe_sema.acquire()
|
||||
@@ -83,8 +104,11 @@ class Controller():
|
||||
|
||||
for rast in recipe['Rasten']:
|
||||
self.rast(rast)
|
||||
if self.rast_abort:
|
||||
break
|
||||
|
||||
self.receipe_sema.release()
|
||||
if self.rast_abort and not self.is_restart:
|
||||
self.receipe_sema.release()
|
||||
|
||||
def rast(self, rast):
|
||||
|
||||
@@ -109,8 +133,6 @@ class Controller():
|
||||
theta_err_sm = Smoother(0.5)
|
||||
heatrate_err_sm = Smoother(0.5)
|
||||
while(doLoop):
|
||||
if self.rast_abort:
|
||||
break
|
||||
|
||||
time_start = time.time()
|
||||
|
||||
@@ -215,6 +237,13 @@ class Controller():
|
||||
|
||||
self.report()
|
||||
|
||||
time.sleep(time_to_sleep)
|
||||
while(True):
|
||||
time.sleep(time_to_sleep)
|
||||
if self.is_pause == False:
|
||||
break
|
||||
if self.rast_abort:
|
||||
break
|
||||
if self.rast_abort:
|
||||
break
|
||||
|
||||
self.stirrer.deactivate()
|
||||
|
||||
Reference in New Issue
Block a user