79 lines
2.3 KiB
Python
79 lines
2.3 KiB
Python
from .task import Task
|
|
from .task_manager import TaskManager
|
|
import sys
|
|
import json
|
|
import threading
|
|
import time
|
|
from datetime import datetime
|
|
from collections import deque
|
|
from biopro.device.manager import DeviceManager
|
|
from biopro.text import *
|
|
|
|
class Project(threading.Thread):
|
|
def __init__(self, project, device_manager: DeviceManager, mqttThread = None, name="project"):
|
|
super(Project, self).__init__(name = name)
|
|
self._project = project
|
|
self._device_manager = device_manager
|
|
self._mqtt_thread = mqttThread
|
|
self._time_interval = 1
|
|
self._start_time = None
|
|
|
|
self._task_manager = TaskManager(self._project['taskList'])
|
|
|
|
self._start_time = None
|
|
|
|
@property
|
|
def desc(self) -> str:
|
|
return self._project['desc']
|
|
|
|
@property
|
|
def status(self) -> str:
|
|
return self._project['status']
|
|
|
|
@property
|
|
def device(self) -> list:
|
|
return self._project['deviceList']
|
|
|
|
@property
|
|
def task(self) -> list:
|
|
return self._task_manager.get()
|
|
|
|
@property
|
|
def get_current_task(self) -> str:
|
|
return self._task_manager.get_current_task()
|
|
|
|
def run(self):
|
|
self._start_time = time.time()
|
|
|
|
while True:
|
|
# current task
|
|
for task in self._task_manager.get_check_task_list():
|
|
# [<match_condition>, ...]
|
|
match_condition_list = task.check_condition('time')
|
|
# [[<match_action>, ...], ...]
|
|
match_action_list = task.get_match_action_list(match_condition_list)
|
|
|
|
for action_list in match_action_list:
|
|
for action in action_list:
|
|
if action.type == 'start':
|
|
self._task_manager.set_current_task(task)
|
|
task.do_action(action)
|
|
|
|
while len(task.instruction_list) > 0:
|
|
instruction = task.instruction_list.pop(0)
|
|
if instruction.get('device', None) != None:
|
|
device = self._device_manager.get_device(self.device[instruction['device']]['connectDevice']['device_address'])
|
|
|
|
if device is None:
|
|
raise RuntimeError(DEVICE_NOT_FOUND, device)
|
|
|
|
# print(instruction['header'], *instruction['arguments'].values())
|
|
getattr(device, instruction['header'])(*instruction['arguments'].values())
|
|
|
|
time.sleep(self._time_interval)
|
|
def stop(self):
|
|
return
|
|
|
|
def close(self):
|
|
return
|