class AutomaticTest(unittest.TestCase): def setUp(self): self.qToEe = Queue() self.qFromEe = Queue() self.ee = ExecutionEngine(1, self.qToEe, self.qFromEe, Lock()) self.ee.start() self.transceive('{} {}'.format('setRecipe', './recipes/test.csv')) def tearDown(self): self.transceive('quit') self.ee.join() def test_flow(self): self.assertEqual(self.transceive('start'), 'timed out') self.assertAlmostEqual(self.transceive('getPv'), 26, delta=1) self.assertEqual(self.transceive('getSv'), 30) self.assertAlmostEqual(self.transceive('getTotalRemainingTime'), 32, delta=1) time.sleep(6) self.assertAlmostEqual(self.transceive('getRemainingStepTime'), 4.5, delta=1) def transceive(self, commandname): self.qToEe.put(commandname) try: return float(self.qFromEe.get(block=True, timeout=1)) except Empty: return 'timed out' except TypeError: pass
def manualTest(): qToEe = Queue() qFromEe = Queue() ee = ExecutionEngine(1, qToEe, qFromEe, Lock()) ee.setRecipe('./recipes/test.csv') ee.start() printAvailableCommands() while True: command = input('command: ') if command == 'q': break if not command in commands.keys(): continue qToEe.put(command) try: print('respone: {}'.format(qFromEe.get(block=True, timeout=1))) except Empty: print('timed out') qToEe.put('quit') ee.join()
class StateMachine(): def __init__(self, brewView, tempControllerAddress, interfaceLock): self.brewView = brewView self.tempControllerAddress = tempControllerAddress self.qToEe = Queue() self.qFromEe = Queue() self.ee = ExecutionEngine(self.tempControllerAddress, self.qToEe, self.qFromEe, interfaceLock) self.ee.start() self.setupLogger() def setupLogger(self): self.logger = logging.getLogger('{}_{}'.format( __name__, self.tempControllerAddress)) self.logger.setLevel(logging.INFO) fh = logging.handlers.RotatingFileHandler('statemachine.log', maxBytes=20000, backupCount=5) fh.setLevel(logging.DEBUG) formatter = logging.Formatter( '%(asctime)s - %(name)s - %(process)d - %(levelname)s - %(message)s') fh.setFormatter(formatter) self.logger.addHandler(fh) def start(self): self.logger.info('start') self.logger.info('selected recipe: {}'.format(self.brewView.getRecipe())) self.qToEe.put('{} {}'.format('setRecipe', self.brewView.getRecipe())) self.qToEe.put('start') def stop(self): self.logger.info('stop') self.qToEe.put('stop') def quit(self): self.logger.info('quit') self.qToEe.put('quit') self.ee.join() def updateViews(self): self.logger.debug('update views') self.clearQFromEe() self.updateSv() self.updatePv() self.updateRemainingStepTime() self.updateTotalRemainingTime() def clearQFromEe(self): for i in range(self.qFromEe.qsize()): self.qFromEe.get() def updateSv(self): self.qToEe.put('getSv') sv = self.qFromEe.get() if not sv == None: self.brewView.setSetValue(sv) def updatePv(self): self.qToEe.put('getPv') pv = self.qFromEe.get() if not pv == None: self.brewView.setProcessValue(pv) def updateRemainingStepTime(self): self.qToEe.put('getRemainingStepTime') rst = self.qFromEe.get() if not rst == None: self.brewView.setStepTimeLeft(rst) def updateTotalRemainingTime(self): self.qToEe.put('getTotalRemainingTime') trt = self.qFromEe.get() if not trt == None: self.brewView.setTotalTimeLeft(trt)