Skip to content
Snippets Groups Projects
external_sensors.py 3.16 KiB
Newer Older
from almemo710 import almemo710
from almemo2490 import almemo2490

import pandas as pd
import climate_chamber_dummy


class ExternalSensorsDummy:
    def __init__(self):
        self.climate_chamber_dummy = climate_chamber_dummy.get_climate_chamber_dummy([0.2, 0.1])

    def get_sensor_values(self):
        # FIXME: Do we have to run the simulation here or do we piggy-back on the chamber probably also being dummy?
        temp = self.climate_chamber_dummy.read_temperature()[0]
        humidity = self.climate_chamber_dummy.read_humidity()[0]
        # half a degree thermal cycle of 10 minutes from the room's air conditioning
        room_temp = 22.97 + abs((self.climate_chamber_dummy.last_simulation_time % 600)-300)/600
        # Use the same DUT chamber values as the simulation, but constant measurement instrument chamber and room
        # temp_dut, temp_room, temp_meas_instr, hum_dut, hum_room, hum_meas_instr, air_press_room
        return temp, room_temp, 23.0, humidity, 62.2, 45.0, 1013

    def close(self):
        pass


def create_sensors(logger_model, logger_address, ext_sensor_channels):
    if logger_address == 'localhost':
        return ExternalSensorsDummy()
    else:
        return ExternalSensors(logger_model, logger_address, ext_sensor_channels)


class ExternalSensors:
    def __init__(self, logger_model, logger_address, ext_sensor_channels):
        if logger_model == '710':
            self.logger = almemo710(ip=logger_address, timeout=10)
        elif logger_model == '2490':
            self.logger = almemo2490(ip=logger_address, timeout=10)
        else:
            raise Exception('Unknown logger type: '+logger_model)

        self.logger_model = logger_model
        self.ext_sensor_channels = ext_sensor_channels
        # initialise the logger
        self.logger.request_sens_channel_list()

    def get_sensor_values(self):
        """
Michael Pawelzik's avatar
Michael Pawelzik committed
        Returns: (temp_dut, temp_room, temp_meas_instr, hum_dut, hum_room, hum_meas_instr, 
                  air_press_room, temp_dut2, hum_dut2)
        """
        sens_vals_dict = dict()
        self.logger.request_meas_vals_all_channels()

        for key, value in self.ext_sensor_channels.items():
            sens_vals_dict[key] = self.logger.fetch_channel_param_from_meas_buffer(pattern=value)[0].meas_val

        # set values from series to variables
        sens_vals_series = pd.Series(sens_vals_dict)

        # set series items for sensor value to matching variable
        temp_dut = sens_vals_series.temp_dut
        temp_room = sens_vals_series.temp_room
        hum_dut = sens_vals_series.hum_dut
        hum_room = sens_vals_series.hum_room
        air_press_room = sens_vals_series.air_press_room
Michael Pawelzik's avatar
Michael Pawelzik committed
        temp_dut2 = sens_vals_series.temp_dut2
        hum_dut2 = sens_vals_series.hum_dut2

        if self.logger_model == '710':
            temp_meas_instr = sens_vals_series.temp_meas_instr
            hum_meas_instr = sens_vals_series.hum_meas_instr

        else:
            temp_meas_instr = -30
            hum_meas_instr = 0

Michael Pawelzik's avatar
Michael Pawelzik committed
        return temp_dut, temp_room, temp_meas_instr, hum_dut, hum_room, hum_meas_instr, \
                air_press_room, temp_dut2, hum_dut2

    def close(self):
        self.logger.close()