Files
controller-wisetopdataserver/python/biopro/project/project.py
T
2022-03-02 18:13:02 +08:00

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