82 lines
2.2 KiB
Python
82 lines
2.2 KiB
Python
import logging
|
|
from datetime import datetime
|
|
from queue import Queue
|
|
from random import random
|
|
from threading import Thread, Event
|
|
from time import sleep
|
|
|
|
from Driver import Driver
|
|
from Sensor import Sensor
|
|
|
|
LOGGER = logging.getLogger()
|
|
|
|
|
|
class ExampleDriverWorker(Thread):
|
|
"""Communicates with the measuring hardware. Here we only produce random data."""
|
|
|
|
def __init__(self, message_queue):
|
|
super().__init__(name="Measure")
|
|
self.message_queue = message_queue
|
|
self.produceData = Event()
|
|
self.exit_request = Event()
|
|
self.prev = 0
|
|
|
|
def run(self):
|
|
"""Worker method of a python Thread. Called when the Thread is started."""
|
|
while not self.exit_request.is_set():
|
|
if self.produceData.is_set():
|
|
temp = self.prev + random() / 100.0
|
|
self.prev = temp
|
|
ts = datetime.utcnow()
|
|
self.message_queue.put((ts, temp))
|
|
else:
|
|
pass
|
|
sleep(1)
|
|
|
|
class ExampleDriver(Driver, Sensor):
|
|
"""docstring for Model."""
|
|
|
|
def __init__(self):
|
|
super(Driver, self).__init__()
|
|
self.measureQueue = Queue()
|
|
self.measureThread = ExampleDriverWorker(self.measureQueue)
|
|
self.measureThread.start()
|
|
self.measureThread.produceData.set()
|
|
self.speed = 10
|
|
self.running = False
|
|
|
|
def exit(self):
|
|
self.measureThread.exit_request.set()
|
|
|
|
def set_config(self, config: dict):
|
|
self.speed = config["speed"]
|
|
|
|
def get_config(self):
|
|
return {"speed": self.speed}
|
|
pass
|
|
|
|
def get_status(self):
|
|
return {"running": self.running}
|
|
|
|
def start_measuring(self):
|
|
self.measureThread.produceData.set()
|
|
logging.info("I started meas")
|
|
|
|
def stop_measuring(self):
|
|
self.measureThread.produceData.clear()
|
|
logging.info("I stopped meas")
|
|
|
|
def exit(self):
|
|
self.stop_measuring()
|
|
self.measureThread.exit_request.set()
|
|
|
|
@property
|
|
def get_data(self):
|
|
time = []
|
|
val = []
|
|
while not self.measureQueue.empty():
|
|
t, data = self.measureQueue.get()
|
|
time.append(t)
|
|
val.append(data)
|
|
return time, val
|