示例#1
0
class TestSensors(unittest.TestCase):

    def setUp(self):
        self._start_time = time.time()
        self._sensors = Sensors()

    def tearDown(self):
        self._sensors.close()

    def test_all_tubes_have_enough_sensors(self):
        tubes = self._sensors.tubes_with_enough_sensors()
        for i in range(constants.NUMBER_OF_PATIENTS):
            with self.subTest(i=i):
                self.assertIn(i, tubes,
                              f"Port {i} is missing sensors.")

    def test_calibration_pressure_sensor_present(self):
        self.assertTrue(self._sensors.calibration_pressure_sensor_connected(),
                        "Calibration pressure sensor is missing.")

    def test_poll_and_connected_sensors_are_same_shape(self):
        connected_sensors = self._sensors.connected_sensors()
        sensor_data = self._sensors.poll()
        for i in range(len(connected_sensors)):
            with self.subTest(i=i):
                self.assertEqual(len(connected_sensors[i]),
                                 len(sensor_data[i]),
                                 f"Contradicting shapes on port {i}.")
def main():
    sensors = Sensors()
    calculator = Calculator()
    communicator = Communicator()
    running = True
    while running:
        try:
            start_time = time.time()
            data = sensors.poll()
            calculator.add_datum(data)
            datum = calculator.get_datum()
            communicator.publish_message(datum)
            while (time.time() - start_time < 1.0):
                time.sleep(0.1)
        except KeyboardInterrupt:
            running = False
            sensors.close()
            communicator.close()
示例#3
0
    def run(self):

        sensors = None
        datalogger = None

        try:

            # initialise objects
            sensors = Sensors(self.T_OFFSET,self.P_OFFSET,self.H_OFFSET)
            datalogger = DataLogger(self.DATALOGFILE, self.DATALOGKEYS, self.DATALOGMAXFILESIZE)
            self.scheduler = HeaterScheduler()
            self.modemanager = ModeManager( scheduler=self.scheduler,
                                            callbackfunc=self.modemanagercallbackfunc)
            self.mqttclient = MqttClient(subscribelist=self.SUBSCRIBELIST)
            self.heatercontroller = HeaterController()
            
            # initialise state
            self.modemanager.setMode(self.modemanager.AUTO)

            # initial data
            t_avg,p_avg,h_avg = sensors.getData()

            # present ourselves
            self.mqttclient.publish({topics.IOTHERMSTATUS:'Active'})
            self.mqttclient.publish({topics.IOTHERMVERSION:__version__ +' '+ __status__})
            self.mqttclient.publish({topics.MODE:self.modemanager.currentmode.name})
            self.mqttclient.publish({topics.TARGETTEMPERATURE:self.modemanager.currentmode.targettemperature})

            t = 0
            
            while True:
               t_,p,h = sensors.getData()
               messages = self.mqttclient.getData()
               
               # use temperature value from mqtt
               if self.USE_OTHERTEMPERATURE and topics.OTHERTEMPERATURE in messages:
                   t = float( messages[topics.OTHERTEMPERATURE] )
            
               if not self.USE_OTHERTEMPERATURE:
                   t = t_
            
               # calculate averages
               t_avg = (t_avg + t)/2       
               p_avg = (p_avg + p)/2       
               h_avg = (h_avg + h)/2

               # calculate derivatives
               d_t = (t - t_avg)/self.REFRESH_SECONDS
               d_p = (p - p_avg)/self.REFRESH_SECONDS
               d_h = (h - h_avg)/self.REFRESH_SECONDS

               # process data from subscribed topics
               self.processMessages( messages )
           
               # prepare for publishing
               messages = self.prepareMessages(t, p, h, d_t, d_p, d_h)
               datalogger.log(messages)
               self.mqttclient.publish(messages)

               # update the heatercontroller with the current and target temperatures
               #print('targettemperature = {}'.format(self.modemanager.currentmode.targettemperature))
               self.heatercontroller.update(t,self.modemanager.currentmode.targettemperature)

               sleep(self.REFRESH_SECONDS)

        finally:
            print('IOThermostat: Stopping IOThermostat..')
            if datalogger:
                datalogger.close()
                
            if sensors:
                sensors.close()
                
            if self.scheduler:
                self.scheduler.close()
                
            if self.heatercontroller:
                self.heatercontroller.close()
                
            if self.mqttclient:
                self.mqttclient.close()
示例#4
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('file',
                        nargs='?',
                        default=None,
                        help="Name of the file to save")
    args = parser.parse_args()
    filename = args.file

    if filename is None:
        i = 1
        while os.path.exists("data/data%d.csv" % i):
            i += 1
        filename = "data/data%d.csv" % i

    # Create directory if it doesn't exist
    if not os.path.exists(os.path.dirname(filename)):
        try:
            os.makedirs(os.path.dirname(filename))
        except OSError as exc:  # Guard against race condition
            if exc.errno != errno.EEXIST:
                raise

    sensors = Sensors()

    video_flags = OPENGL | DOUBLEBUF | RESIZABLE

    pygame.init()
    pygame.display.set_mode((900, 500), video_flags)

    title = "Press Esc to quit"
    pygame.display.set_caption(title)
    sim = Simulation(900, 500)
    frames = 0
    fps = 0
    ticks = pygame.time.get_ticks()
    sensor_data = SensorData()
    activity = 0

    while True:
        sensor_data = sensors.read() or sensor_data

        event = pygame.event.poll()
        if event.type == QUIT or (event.type == KEYDOWN and
                                  (event.key == K_ESCAPE or event.key == K_q)):
            break

        elif event.type == VIDEORESIZE:
            pygame.display.set_mode(event.dict['size'], video_flags)
            sim.resize(*event.dict['size'])

        elif event.type == KEYDOWN and event.key == K_r:
            sim.recenter()

        elif event.type == KEYDOWN and event.key in range(K_0, K_9 + 1):
            activity = int(event.key - K_0)

        elif event.type == KEYDOWN and event.key in range(K_KP0, K_KP9 + 1):
            activity = int(event.key - K_KP0)

        elif event.type == KEYDOWN and (event.key == K_RETURN
                                        or event.key == K_KP_ENTER):
            print("\n - ACTIVITY %d:" % (activity), end='')

            save_data = list(sensor_data.clf_data())
            with open(filename, "a", newline='') as csv_file:
                csv_writer = csv.writer(csv_file)
                csv_writer.writerow([activity] + save_data)
            print(" Saved %s      " % save_data, end='\n\n')

        if sensor_data is not None:
            sim.sensor_data = sensor_data

        sim.draw()

        pygame.display.flip()

        if (pygame.time.get_ticks() - ticks) >= 250:
            fps = ((frames * 1000) // (pygame.time.get_ticks() - ticks))
            ticks = pygame.time.get_ticks()
            frames = 0
        pygame.display.set_caption(title + " | FPS: %d | Activity %d" %
                                   (fps, activity))

        frames = frames + 1

    sensors.close()
示例#5
0
from sensors import Sensors
import time

sensors = Sensors()
sensors.boot()

while True:

    sensors.read_data()
    print(sensors.mag, sensors.acc, sensors.gyro)
    time.sleep(0.02)

sensors.close()
print("sensor closed")
示例#6
0
def main():
    parser = argparse.ArgumentParser()
    group = parser.add_mutually_exclusive_group()
    group.add_argument('--net', metavar='port', const=5000, default=None,
                       type=int, nargs='?', help='Listen to sensor data over UDP')
    group.add_argument('--serial', metavar='port', const=True, default=None,
                       nargs='?', help='Listen to sensor data over serial (default)')
    group.add_argument('--demo', action='store_const', dest='demo',
                       const=True, help='Only show 3D model with no sensor data')
    args = parser.parse_args()
    if not args.net and not args.serial and not args.demo:
        args = parser.parse_args(['--serial'])

    if not args.demo:
        sensors = Sensors(net_port=args.net, serial_port=args.serial)

    video_flags = OPENGL | DOUBLEBUF | RESIZABLE

    pygame.init()
    pygame.display.set_mode((900, 500), video_flags)

    title = "AutomailX"
    pygame.display.set_caption(title)
    sim = Simulation(900, 500)
    frames = 0
    fps = 0
    ticks = pygame.time.get_ticks()
    sensor_data = SensorData()
    if args.demo:
        sensor_data.setdata(flex=sim.flex_straight)
    prediction = None
    try:
        predictor = Predict()
    except Exception as exception:
        print("Predictor failed:", exception.with_traceback)
        predictor = None
    while True:
        if not args.demo:
            sensor_data = sensors.read() or sensor_data

        event = pygame.event.poll()
        if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE):
            break
        # if event.type == KEYDOWN and event.key == K_z:
        #     ser.write("z")
        elif event.type == VIDEORESIZE:
            pygame.display.set_mode(event.dict['size'], video_flags)
            sim.resize(*event.dict['size'])
        elif event.type == KEYDOWN and event.key == K_r:
            sim.recenter()
        else:
            keys = pygame.key.get_pressed()  # checking pressed keys
            if keys[pygame.K_RIGHT]:
                sensor_data.flex = \
                    min(sim.flex_straight, max(sim.flex_bent, sensor_data.flex + 600))
            elif keys[pygame.K_LEFT]:
                sensor_data.flex = \
                    min(sim.flex_straight, max(sim.flex_bent, sensor_data.flex - 600))
            elif args.demo:
                if event.type == KEYDOWN and event.key == K_UP:
                    sim.nextPose()
                elif event.type == KEYDOWN and event.key == K_DOWN:
                    sim.prevPose()

        if sensor_data is not None:
            sim.sensor_data = sensor_data
            if not args.demo and predictor is not None:
                prediction = predictor.predict(sensor_data) or 0
                sim.setPose(prediction)
                print(" Prediction: %s   " % prediction, end='')
        sim.draw()

        pygame.display.flip()

        if (pygame.time.get_ticks()-ticks) >= 250:
            fps = ((frames*1000)//(pygame.time.get_ticks()-ticks))
            ticks = pygame.time.get_ticks()
            frames = 0
        prediction_title = ("| Prediction: %d" % prediction) if prediction is not None else ""
        pygame.display.set_caption("%s | FPS: %3d %s" % (title, fps, prediction_title))

        frames = frames+1

    if not args.demo:
        sensors.close()