Files
controller-wisetopdataserver/python/biopro/project/project.py
T

79 lines
2.3 KiB
Python
Raw Normal View History

2022-02-07 20:27:30 +08:00
from .task import Task
from .task_manager import TaskManager
import sys
import json
import threading
import time
2022-02-12 00:21:27 +08:00
from datetime import datetime
2022-02-17 20:35:36 +08:00
from collections import deque
2022-02-25 20:54:58 +08:00
from biopro.device.manager import DeviceManager
from biopro.text import *
2022-02-07 20:27:30 +08:00
class Project(threading.Thread):
2022-02-25 20:54:58 +08:00
def __init__(self, project, device_manager: DeviceManager, mqttThread = None, name="project"):
2022-02-07 20:27:30 +08:00
super(Project, self).__init__(name = name)
self._project = project
2022-02-25 20:54:58 +08:00
self._device_manager = device_manager
2022-02-07 20:27:30 +08:00
self._mqtt_thread = mqttThread
self._time_interval = 1
2022-02-12 00:21:27 +08:00
self._start_time = None
2022-02-08 20:12:44 +08:00
2022-02-10 00:49:49 +08:00
self._task_manager = TaskManager(self._project['taskList'])
2022-02-14 19:19:54 +08:00
2022-03-02 18:13:02 +08:00
self._start_time = None
2022-02-07 20:27:30 +08:00
@property
def desc(self) -> str:
2022-02-17 20:35:36 +08:00
return self._project['desc']
2022-02-08 20:12:44 +08:00
@property
def status(self) -> str:
2022-02-17 20:35:36 +08:00
return self._project['status']
2022-02-08 20:12:44 +08:00
@property
def device(self) -> list:
2022-02-17 20:35:36 +08:00
return self._project['deviceList']
2022-02-07 20:27:30 +08:00
@property
2022-02-08 20:12:44 +08:00
def task(self) -> list:
2022-02-07 20:27:30 +08:00
return self._task_manager.get()
@property
2022-02-08 20:12:44 +08:00
def get_current_task(self) -> str:
return self._task_manager.get_current_task()
2022-03-02 18:13:02 +08:00
2022-02-17 20:35:36 +08:00
def run(self):
2022-03-02 18:13:02 +08:00
self._start_time = time.time()
2022-02-17 20:35:36 +08:00
while True:
2022-02-25 20:54:58 +08:00
# current task
2022-02-17 20:35:36 +08:00
for task in self._task_manager.get_check_task_list():
2022-02-25 20:54:58 +08:00
# [<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:
2022-03-02 18:13:02 +08:00
if action.type == 'start':
self._task_manager.set_current_task(task)
2022-02-25 20:54:58 +08:00
task.do_action(action)
2022-02-17 20:35:36 +08:00
while len(task.instruction_list) > 0:
instruction = task.instruction_list.pop(0)
if instruction.get('device', None) != None:
2022-02-25 20:54:58 +08:00
device = self._device_manager.get_device(self.device[instruction['device']]['connectDevice']['device_address'])
if device is None:
raise RuntimeError(DEVICE_NOT_FOUND, device)
2022-03-02 18:13:02 +08:00
# print(instruction['header'], *instruction['arguments'].values())
2022-02-25 20:54:58 +08:00
getattr(device, instruction['header'])(*instruction['arguments'].values())
2022-02-17 20:35:36 +08:00
time.sleep(self._time_interval)
2022-02-08 20:12:44 +08:00
def stop(self):
return
def close(self):
return