Пример #1
0
def extra_telemetry():
	tmp,pre,hum = bme280.readBME280All()
	return "{:.2f}".format(tmp) + ',' + "{:.5f}".format(pre) + ',' + "{:.5f}".format(hum)
Пример #2
0
time_now3 = t

while True:
    if time.time() != t:
        rn = datetime.datetime.now()
        ltime = rn.strftime("%H:%M:%S")
        daydate = rn.strftime("%A, %d %B %Y")
        ser.write(b'time.txt=\"' + ltime.encode() + b'\"' + e)
        ser.write(b'daydate.txt=\"' + daydate.encode() + b'\"' + e)

        t = time.time()

# Crude scheduler to get BME280 readings every 10 secs
    if time.time() >= time_now1 + 10:
        try:
            ltemp, lpres, lhum = readBME280All()
            ser.write(b'temp.txt=\"' + b'%.2f' % ltemp + b'C\"' + e)
            ser.write(b'hum.txt=\"' + b'%.2f' % lhum + b'%RH\"' + e)
            ser.write(b'pres.txt=\"' + b'%.1f' % lpres + b'hPa\"' + e)
        except:
            ser.write(b'temp.txt=\"No data\"' + e)
            ser.write(b'hum.txt=\"No data\"' + e)
            ser.write(b'pres.txt=\"No data\"' + e)
        time_now1 = time.time()

# Crude scheduler to get Google calendar every 30 mins
    if time.time() >= time_now2 + 1800:
        try:
            tdyStr, tmwStr = getCal(myCalUrl)
            ser.write(b"cal.txt=\"" + tdyStr.encode() + tmwStr.encode() +
                      b"\"" + e)
Пример #3
0
    def main(self, num_samples, set_temperature, Father):
        # Initialize Relay
        REL = relay.Relay_module()
        REL.reset()

        # detect file
        if APP_PEN_DRIVE:
            FILE_NAME = detect_file.File(folder)[0]
        else:
            FILE_NAME = "/home/pi/Desktop/Temperature_profile.txt"

        # Load Profile
        VOL = readTempProfile(FILE_NAME)[0]
        print(VOL)

        self.NEXTION_NUM_SAMPLES = num_samples
        self.NEXTION_SET_temperature = set_temperature

        # import oven and multimeter
        if APP_OVEN_PRESENT:
            OVEN = TTC4006_Tira.TTC4006(TTC_SERIAL_PORT)
            OVEN.TTC_ON()
            OVEN.TTC_ENABLE_TEMP()

        P = 5
        I = 0
        D = 0

        pid = PID.PID(P, I, D)
        pid.setSampleTime(1)

        if APP_Sourcemeter_PRESENT:
            Sourcemeter = Keithley_2602_Eth.SourceMeter(SM_IP, SM_PORT)
            Sourcemeter.startComm()

        # create file and title
        CF = data_storage.create_file()
        test_mode = "Auto"
        equipment_Info = "TTC-4006 + Sourcemeter-2602"
        Driver_root = detect_file.File(folder)[1]
        start_time = str(datetime.datetime.now())
        filename = start_time.replace(" ", "_").replace(".",
                                                        "-").replace(":", "-")
        PATH = CF.folder(Driver_root, filename)
        CF.header(PATH, filename, start_time, equipment_Info, test_mode,
                  self.NEXTION_NUM_SAMPLES)
        CF.content(PATH, filename, (
            "Time(s)\tSetTemp.(oC)\tActual Temp.(oC)\tHumidity(%)\tTemp.Sensor(oC)\tSample number\tCurrent(A)\tResistence(ohm)\r\n"
        ))

        t_start = time.time()

        for step in VOL:
            print(step)
            # setting the oven
            step_time = step[0] * 60  # step_time in seconds
            step_temp = float(
                format(float(self.NEXTION_SET_temperature) / 0.84, ".2f"))

            t1 = datetime.datetime.now()
            t2 = datetime.datetime.now() + datetime.timedelta(
                seconds=step_time)

            while (t1 < t2):
                # Relay switching
                REL.reset()

                for i in range(self.NEXTION_NUM_SAMPLES):
                    if APP_OVEN_PRESENT:
                        # run oven)
                        print('01 - Reading data from Oven...')
                        temp_real = OVEN.TTC_Read_PV_Temp()
                        temp_set = OVEN.TTC_Read_SP_Temp()
                    else:
                        temp_set = format(1.00, "0.2f")
                        temp_real = format(1.00, "0.2f")

                    pid.SetPoint = self.NEXTION_SET_temperature
                    pid.setKp(float(P))
                    pid.setKi(float(I))
                    pid.setKd(float(D))

                    print('02 - Reading data from Humidity Sensor...')
                    if APP_BME_280_PRESENT:
                        try:
                            temperature, pressure, humidity = bme280.readBME280All(
                            )

                            # Medicine
                            if ((humidity == None) or (temperature == None)):
                                humidity = BME_280_INVALID_HUMI
                                temperature = BME_280_INVALID_TEMP
                                print(
                                    '02 - Reading data from Humidity Sensor (NONE! - ERROR)...'
                                )
                            elif ((type(humidity) == str)
                                  or (type(temperature) == str)):
                                humidity = BME_280_INVALID_HUMI
                                temperature = BME_280_INVALID_TEMP
                                print(
                                    '02 - Reading data from Humidity Sensor (INVALID STRING! - ERROR)...'
                                )

                        except:
                            humidity = BME_280_INVALID_HUMI
                            temperature = BME_280_INVALID_TEMP
                            print(
                                '02 - Reading data from Humidity Sensor (INVALID STRING! - ERROR)...'
                            )

                    else:
                        print(
                            '02 - Reading data from Humidity Sensor (DISABLED)...'
                        )
                        humidity = BME_280_INVALID_HUMI
                        temperature = BME_280_INVALID_TEMP

                    HUMI_sensor = format(humidity, "0.2f")
                    TEMP_sensor = format(temperature, "0.2f")
                    print('02 - Reading data from Humidity Sensor: Temp(oC): ',
                          TEMP_sensor)
                    print('02 - Reading data from Humidity Sensor: Humi(%): ',
                          HUMI_sensor)

                    print("Sensor Temperature : ", str(TEMP_sensor))

                    pid.update(float(TEMP_sensor))

                    target_temperature = pid.output

                    if target_temperature > 180:
                        target_temperature = 180
                    elif target_temperature < -40:
                        target_temperature = -40
                    else:
                        target_temperature = target_temperature

                    OVEN.TTC_Set_Temp(target_temperature)

                    print("PID set Temperature : ", str(target_temperature))
                    print("Chamber real Temperature : ", temp_real)

                    # run time
                    t_step = time.time()
                    t_run = format(t_step - t_start, "0.2f")

                    REL.RelaySelect(i)
                    sleep(RELAY_HOLDING_TIME)

                    if APP_Sourcemeter_PRESENT:
                        fcurrent = Sourcemeter.Measure(
                            'a', self.NEXTION_SET_VOLTAGE)
                        print("Reading Sourcemeter:", i)
                    else:
                        fcurrent = (i * float(t_run))

                    I_Value = format(float(fcurrent), '.3E')

                    R_Value = format(self.NEXTION_SET_VOLTAGE / float(I_Value),
                                     '.3E')

                    print("Resistance:", R_Value)
                    print("")

                    REL.RelayDeSelect(i)

                    # Persistency
                    print('06 - Saving data...')
                    CF.content(PATH, filename,
                               (str(t_run), str(temp_set), str(temp_real),
                                str(HUMI_sensor), str(TEMP_sensor), str(i),
                                str(I_Value), str(R_Value)))

                    # create file for each sample
                    CF.content(PATH, 'Sample' + str(i),
                               (str(t_run), str(temp_set), str(temp_real),
                                str(HUMI_sensor), str(TEMP_sensor), str(i),
                                str(I_Value), str(R_Value)))

                    if APP_NEXTION_PRESENT:
                        print('07 - Reading Display...')
                        RE_VAL = set()
                        DE = str(DIS.read())
                        # print (DE)
                        RE_VAL.add(DE)
                        # print (RE_VAL)

                        if "['e\\x05\\x15\\x01\\xff\\xff\\xff']" in RE_VAL:
                            DIS.write('t0.txt="Stop"')
                            OVEN.TTC_OFF()
                            sys.exit()

                        elif "['e\\x05\\x14\\x01\\xff\\xff\\xff']" in RE_VAL:
                            # DIS.write("rest\xff\xff\xff")
                            os.system("sudo reboot")
                            break

                        print('07 - Updating Display...')

                        if Father != None:
                            Father.updateMultimeter([
                                temp_set, temp_real, TEMP_sensor, HUMI_sensor,
                                t_run, R_Value, i
                            ])

                t1 = datetime.datetime.now()

        if APP_OVEN_PRESENT:
            OVEN.TTC_OFF()
Пример #4
0
import bme280

(chip_id, chip_version) = bme280.readBME280ID()
print "Chip ID :", chip_id
print "Version :", chip_version

temperature, pressure, humidity = bme280.readBME280All()

print "Temperature : ", temperature, "C"
print "Pressure : ", pressure, "hPa"
print "Humidity : ", humidity, "%"
Пример #5
0
cam.framerate = 15
#cam.rotation = 270

#number of data points to collect over time
loop_num = 100000

df = pd.DataFrame(data=np.zeros((loop_num, 7)),
                  columns=['time', 'temp', 'press', 'rh', 'mq2', 'mq3', 'mq5'])

save_df_path = '/media/pi/KINGSTON/sensor_df.csv'

for i in range(loop_num):
    print('%i / %i' % (i + 1, loop_num))

    #read BME280
    temp, press, rh = bme280.readBME280All()
    temp_f = temp * (9 / 5) + 32

    #read MCP3008 ADC
    mcp_output = read_mcp_all()
    mq2, mq3, mq5 = mcp_output[0], mcp_output[1], mcp_output[2]

    #print results
    print(time.ctime())
    print('temp (C), (F): ' + format(temp) + ', ' + format(temp_f))
    print('pressure (hPa): ' + format(press))
    print('humidity (%): ' + format(rh))

    print('MQ-X sensors: ' + format(np.around([mq2, mq3, mq5], decimals=5)))

    df.iloc[i] = [time.ctime(), temp, press, rh, mq2, mq3, mq5]
Пример #6
0
def read_external_pressure():
    temperature, pressure, humidity = bme280.readBME280All()
    pressure = "{:.2f}".format(pressure)
    return pressure
Пример #7
0
    def main(self, num_samples, set_temperature, setV, setF, Father):
        RE_VAL = set()

        # Initialize Relay
        REL = relay.Relay_module()
        REL.reset()

        # set PID parameters
        P = 15
        I = 0
        D = 0

        pid = PID.PID(P, I, D)
        pid.setSampleTime(1)

        if APP_NEXTION_PRESENT:
            self.NEXTION_NUM_SAMPLES = num_samples
            self.NEXTION_SET_TEMP = float(
                format(float(set_temperature) / 0.94, ".2f"))
        else:
            self.NEXTION_NUM_SAMPLES = 8
            self.NEXTION_SET_TEMP = 25

        # import oven and multimeter
        if APP_OVEN_PRESENT:
            OVEN = VT4002_SM.VT4002(VT4002_IP)
            OVEN.startComm()

        if APP_DMM_196_PRESENT:
            LCR = LCR_Eth.LCR_Meter(LCR_IP, LCR_PORT)
            LCR.startComm()

        # create file and title
        CF = data_storage.create_file()
        test_mode = "Manual"
        equipment_Info = "VT-4002 + LCR-4192A"
        Driver_root = detect_file.File(folder)[1]
        start_time = str(datetime.datetime.now())
        filename = start_time.replace(" ", "_").replace(".",
                                                        "-").replace(":", "-")
        PATH = CF.folder(Driver_root, filename)
        CF.header(PATH, filename, start_time, equipment_Info, test_mode,
                  self.NEXTION_NUM_SAMPLES)
        CF.content(
            PATH, filename,
            "Time(s)\tSetTemp.(oC)\tActual Temp.(oC)\tHumidity(%)\tTemp.Sensor(oC)\tSample number\tR\tX\tCP\tRP\r\n"
        )

        t_start = time.time()

        while True:
            for i in range(self.NEXTION_NUM_SAMPLES):
                if APP_OVEN_PRESENT:
                    # run oven)
                    print("01 - Reading data from Oven...")
                    temp = OVEN.read_temp()
                    temp_set = temp[0]
                    temp_real = temp[1]
                else:
                    temp_set = format(1.00, "0.2f")
                    temp_real = format(1.00, "0.2f")

                pid.SetPoint = self.NEXTION_SET_TEMP
                pid.setKp(float(P))
                pid.setKi(float(I))
                pid.setKd(float(D))

                # read temperature sensor
                # Humidity Sensor
                # If is not OK => apply non valid temp and humidity
                print("02 - Reading data from Humidity Sensor...")
                if APP_BME_280_PRESENT:
                    try:
                        temperature, pressure, humidity = bme280.readBME280All(
                        )

                        # Medicine
                        if ((humidity == None) or (temperature == None)):
                            humidity = BME_280_INVALID_HUMI
                            temperature = BME_280_INVALID_TEMP
                            print(
                                "02 - Reading data from Humidity Sensor (NONE! - ERROR)..."
                            )
                        elif ((type(humidity) == str)
                              or (type(temperature) == str)):
                            humidity = BME_280_INVALID_HUMI
                            temperature = BME_280_INVALID_TEMP
                            print(
                                "02 - Reading data from Humidity Sensor (INVALID STRING! - ERROR)..."
                            )

                    except:
                        humidity = BME_280_INVALID_HUMI
                        temperature = BME_280_INVALID_TEMP
                        print(
                            "02 - Reading data from Humidity Sensor (INVALID STRING! - ERROR)..."
                        )

                else:
                    print(
                        "02 - Reading data from Humidity Sensor (DISABLED)...")
                    humidity = BME_280_INVALID_HUMI
                    temperature = BME_280_INVALID_TEMP

                HUMI_sensor = format(humidity, "0.2f")
                TEMP_sensor = format(temperature, "0.2f")
                print("02 - Reading data from Humidity Sensor: Temp(oC): ",
                      TEMP_sensor)
                print("02 - Reading data from Humidity Sensor: Humi(%): ",
                      HUMI_sensor)

                print("Sensor Temperature : ", str(TEMP_sensor))

                pid.update(TEMP_sensor)

                target_temperature = pid.output

                if target_temperature > 130:
                    target_temperature = 130
                elif target_temperature < -40:
                    target_temperature = -40
                else:
                    target_temperature = target_temperature

                print("PID set Temperature : ", str(target_temperature))
                print("Chamber real Temperature : ", temp_real)

                OVEN.set_temp(target_temperature)

                # run time
                t_step = time.time()
                t_run = format(t_step - t_start, "0.2f")

                # relay selection
                print("03 - Swtich Relay: %d" % i)
                REL.RelaySelect(i)
                sleep(RELAY_HOLDING_TIME)

                # run multimeter
                print("04- Multimeter DMM196 Reading...")
                if APP_DMM_196_PRESENT:
                    FinalD = LCR.measure(setV, setF)
                    print("LCR Reading: ", FinalD)
                    CP = str(FinalD[0])
                    RP = str(FinalD[1])
                    R_value = str(FinalD[2])
                    X_value = str(FinalD[3])
                else:
                    CP = 0
                    RP = 0
                    R_value = 0
                    X_value = 0

                REL.RelayDeSelect(i)

                # Persistency
                print("06 - Saving data...")
                print("")
                result1 = []
                result2 = []
                result1.append([
                    str(t_run),
                    str(temp_real),
                    str(HUMI_sensor),
                    str(TEMP_sensor),
                    str(i),
                    str(R_value),
                    str(X_value),
                    str(CP),
                    str(RP)
                ])
                CF.content(PATH, filename, result1)

                # create file for each sample
                result2.append([
                    str(t_run),
                    str(temp_real),
                    str(HUMI_sensor),
                    str(TEMP_sensor),
                    str(i),
                    str(R_value),
                    str(X_value),
                    str(CP),
                    str(RP)
                ])
                CF.content(PATH, 'Sample' + str(i), result2)

                Father.Update([
                    temp_set, temp_real, TEMP_sensor, humidity, t_run, R_value,
                    X_value, i
                ])

                DE = str(DIS.read())
                # print (DE)
                RE_VAL.add(DE)
                # print (RE_VAL)

                if "['e\\x0f\\x1b\\x01\\xff\\xff\\xff']" in RE_VAL:
                    print("Exiting")
                    OVEN.close()
                    RE_VAL.clear()
                    DIS.write("page Device Select\xff\xff\xff")
                    return

                elif "['e\\x0f\\x1c\\x01\\xff\\xff\\xff']" in RE_VAL:
                    # DIS.write("rest\xff\xff\xff")
                    RE_VAL.clear()
                    DIS.write("page restart\xff\xff\xff")
                    os.system("sudo reboot")

                print("07 - Updating Display...")
Пример #8
0
def main():

    global DEVICE
    global SMBUSID
    global LEDGPIO
    global SWITCHGPIO
    global INTERVAL
    global AUTOSHUTDOWN
    global THINGSPEAKKEY
    global THINGSPEAKURL

    # Check if config file exists and overwrite
    # default constants with new values
    if os.path.isfile('templogger.cfg') == True:
        print("Found templogger.cfg")
        f = open('templogger.cfg', 'r')
        data = f.read().splitlines()
        f.close()
        if data[0] == 'Temp Logger':
            print("Using templogger.cfg")
            DEVICE = int(data[1], 16)
            SMBUSID = int(data[2])
            LEDGPIO = int(data[3])
            SWITCHGPIO = int(data[4])
            INTERVAL = int(data[5])
            AUTOSHUTDOWN = int(data[6])
            THINGSPEAKKEY = data[7]
            THINGSPEAKURL = data[8]

    # Setup GPIO
    GPIO.setmode(GPIO.BCM)
    GPIO.setwarnings(True)
    # LED on GPIO17
    GPIO.setup(LEDGPIO, GPIO.OUT)
    # Switch on GPIO22 as input pulled LOW by default
    GPIO.setup(SWITCHGPIO, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
    # Define what function to call when switch pressed
    GPIO.add_event_detect(SWITCHGPIO, GPIO.RISING, callback=switchCallback)
    bus = smbus.SMBus(SMBUSID)

    try:
        while True:
            GPIO.output(LEDGPIO, True)
            (temperature, pressure) = bme280.readBME280All()
            sendData(THINGSPEAKURL, THINGSPEAKKEY, 'field1', 'field2',
                     'field3', temperature, pressure, currentHumidity(bus))

            # Toggle LED while we wait for next reading
            for i in range(0, INTERVAL * 60):
                GPIO.output(LEDGPIO, not GPIO.input(LEDGPIO))
                time.sleep(1)
    except Exception as e:
        # Reset GPIO settings
        crash = [
            "Error on line {}".format(sys.exc_info()[-1].tb_lineno), "\n", e
        ]
        print(crash)
        timeX = str(time.time())
        with open("CRASH-" + timeX + ".txt", "w") as crashLog:
            for i in crash:
                i = str(i)
                crashLog.write(i)
        GPIO.cleanup()
        sys.exit(0)
Пример #9
0
def readBME():
    temp, pres, humid = bme280.readBME280All()
    temp = round(float(temp),1)
    pres = round(float(pres),1)
    humid = round(float(humid),1)
    return (temp, pres, humid)
Пример #10
0
def main():

    #Bring in constants
    global BME_ADDR
    global SMBUSID
    global INTERVAL
    global THINGSPEAKKEY
    global THINGSPEAKURL
    global errors
    global I2C_ADDR
    global LCD_WIDTH
    global pwm_live

    #Setup
    errors = 0    #exception counter
    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BCM)      #Use BCM numbering for pins
    GPIO.setup(pushButton, GPIO.IN, pull_up_down=GPIO.PUD_UP)
    GPIO.setup(PUMP, GPIO.OUT, initial=GPIO.LOW)
    GPIO.add_event_detect(pushButton, GPIO.BOTH)
    GPIO.add_event_callback(pushButton, BUTTON)

    bus = smbus.SMBus(SMBUSID)  
    lcd_i2c.lcd_init()
    MAX31790.initializeMAX(1)
    try:
        sensW = bmp280.bmp280Wrapper()
    except:
        print BMP280 init FAIL
    print("Found BMP280 : (%s)" %hex(sensW.chipID))
    sensW.resetSensor()
    # configuration byte contains standby time, filter, and SPI enable.
    bmp280Config = sensW.tSb62t5 | sensW.filt4
    # measurement byte contains temperature + pressure oversampling and mode.
    bmp280Meas = sensW.osP16 | sensW.osT2 | sensW.modeNormal
    # Set sensor mode.
    sensW.setMode(config = bmp280Config, meas = bmp280Meas)

    while True:
        try:
            #pull data from BME
            lcd_i2c.lcd_string("      UPDATING      ",LCD_LINE_1)   #display "updating" during thingspeak update
            (temperature,pressure,humidity)=bme280.readBME280All(BME_ADDR)
            temperatureF=temperature*(9)/(5)+32
            #send to thingspeak server
            sendData(THINGSPEAKURL,THINGSPEAKKEY,'field1','field2','field3','field4',temperature,pressure,humidity,temperatureF)
            sys.stdout.flush()

            # DO THINGS HERE while Waiting for next ThingsSpeak update
            for i in range(0,INTERVAL*6):
  
                (temperature,pressure,humidity)=bme280.readBME280All(BME_ADDR)
                temperatureF=temperature*(9)/(5)+32
                rpm = MAX31790.readRPM(1)
                #BMP280 TEST
                sensW.readSensor()
                print("Pressure   : %s Pa" %sensW.pressure)
                print("Temperature: %s C" %sensW.temperature)

                #Fan  Speed Control Loop
                templog = "Temp = {:.2f} F | RPM = {:d}".format(temperatureF,rpm) + " | "
                if temperatureF > 82:
                    MAX31790.setPWMTargetDuty(1, 30)            # MAX fan speed
                    templog = templog + "PWM = 70"
                    pwm_live = 80
                    print templog
                elif temperatureF > 80:
                    MAX31790.setPWMTargetDuty(1, 40)
                    templog = templog + "PWM = 60"
                    pwm_live = 60
                    print templog
                elif temperatureF > 76:
                    MAX31790.setPWMTargetDuty(1, 50)
                    templog = templog + "PWM = 50"
                    pwm_live = 50
                    print templog
                elif temperatureF > 72:
                    MAX31790.setPWMTargetDuty(1, 60)
                    templog = templog + "PWM = 40"
                    pwm_live = 40
                    print templog  
                else:
                    MAX31790.setPWMTargetDuty(1, 70)              # MIN fan speed
                    templog = templog + "PWM = 30"
                    pwm_live = 30
                    print templog
                # Refresh LCD screen
                lcd_i2c.lcd_string("PWM  = {:.0f} | [{}]".format(pwm_live, time.strftime("%H:%M")),LCD_LINE_1)  #update the time         
                lcd_i2c.lcd_string("Tach = {:d} rpm".format(rpm),LCD_LINE_2)         
                lcd_i2c.lcd_string("Temp = {:.1f} F | {:.0f}C".format(temperatureF,temperature),LCD_LINE_3)
                lcd_i2c.lcd_string("Hum  = {:.2f} %".format(humidity),LCD_LINE_4)
                time.sleep(10)
        #Error Handling
        except :
            errors += 1
            print "err cnt: {:d}  , delay 5s -> try again".format(errors)
            #lcd_i2c.lcd_string("   err = {:d}   ERROR".format(errors),LCD_LINE_1)   #display that an error occured      
            time.sleep(5)
            continue
Пример #11
0
# datasheet for more details on the meanings of each mode (accuracy and power
# consumption are primarily the differences).  The default mode is STANDARD.
#sensor = BMP085.BMP085(mode=BMP085.BMP085_ULTRAHIGHRES)

 
UDP_IP = "127.0.0.1"
UDP_PORT = 8056

sock = socket.socket(socket.AF_INET, # Internet
                     socket.SOCK_DGRAM) # UDP

(chip_id, chip_version) = readBME280ID()
print "Chip ID     :", chip_id
print "Version     :", chip_version

temperature,pressure,humidity = readBME280All()

print "Temperature : ", temperature, "C"
print "Pressure : ", pressure, "hPa"
print "Humidity : ", humidity, "%"
                     
while(True):
    #pressure = sensor.read_pressure()
    temperature,pressure,humidity = readBME280All()
    pressure = pressure * 100
    avgFilter.Update(pressure)
    if avgFilter.GetCount() % 50 == 0:
        #print('Temp = {0:0.2f} *C'.format(sensor.read_temperature()))
        #print('Pressure = {0:0.2f} Pa'.format(sensor.read_pressure()))
    #print('Altitude = {0:0.2f} m'.format(sensor.read_altitude()))
    #print('Sealevel Pressure = {0:0.2f} Pa'.format(sensor.read_sealevel_pressure()))
Пример #12
0
        print(*pm25)
        print(*pm10)
        post_data = {
            'pm2': round(sum(pm25) / len(pm25)),
            'pm10': round(sum(pm10) / len(pm10)),
            'date': time.time()
        }
    except:
        post_data = {'date': time.time()}

    t = list()
    p = list()
    rh = list()
    for i in range(0, 15):
        try:
            t1, p1, rh1 = bme280.readBME280All()
        except:
            t1, p1, rh1 = (-999, -999, -999)
        t.append(t1)
        p.append(p1)
        rh.append(rhcode(rh1))
        time.sleep(1)
    for i in range(0, 5):
        try:
            rh1, t1 = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 4)
            print("DHT: ", t1, rh1)
        except:
            rh1, t1 = (-999, -999)
            try:
                gpio.output(17, gpio.LOW)
                time.sleep(1)
Пример #13
0
uhr_2 = (244, 243, 242)
frueh = (240, 239, 238, 237)
vor_2 = (236, 235, 234)
# Zeile 15
abends = (252, 253, 254, 255, 256, 257)
mitternacht = (258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268)
nachts = (264, 265, 266, 267, 268, 269)
# Zeile 16
morgens = (287, 286, 285, 284, 283, 282, 281)
warm = (280, 279, 278, 277)
mittags = (276, 275, 274, 273, 272, 271, 270)

# Start actual infinite while loop to run script
while True:
    # check and light h
    temp, p, h = bme280.readBME280All()
    temp = int(temp)
    temperature = get_temperature(temp)
    temperature = temperature + es + ist + grad + warm

    # check brightness
    reload(brightness)
    from brightness import *
    # adjust brightness/color levels when wrong values input
    if l > 1:
        l = 1
    if r > 255:
        r = 255
    elif r < 0:
        r = 0
    if g > 255:
    def main(self):
        print("start")
        TP = readTempProfile(FILE_NAME)[0]
        print(TP)

        OVEN = TTC4006_Tira.TTC4006(TTC_SERIAL_PORT)

        P = 5
        I = 0
        D = 0

        pid = PID.PID(P, I, D)
        pid.setSampleTime(1)

        t_start = te.time()

        for step in TP:
            # setting the oven
            step_time = step[0] * 60  # step_time in seconds
            step_temp = float(format(float(step[1]) / 0.84, ".2f"))

            start_time = str(datetime.datetime.now())
            #filename = start_time.replace(" ", "_").replace(".", "-").replace(":", "-") + "_P_5"
            filename = "PID_15" + "_" + start_time.replace(" ", "_").replace(
                ".", "-").replace(":", "-")
            op = open("/home/pi/Desktop/" + filename + ".txt", "a")
            op.write(
                "Time(s)\tSetTemp.(oC)\tActual Temp.(oC)\tTemp.Sensor(oC)\r\n")
            op.close()

            print(step)

            t1 = datetime.datetime.now()
            t2 = datetime.datetime.now() + datetime.timedelta(
                seconds=step_time)

            while (t1 < t2):
                t_step = te.time()
                t_r = t_step - t_start
                t_run = format(t_r, "0.2f")

                # run oven
                print('01 - Reading data from Oven...')

                t_step = time.time()
                t_r = t_step - t_start
                t_run = format(t_r, "0.2f")

                pid.SetPoint = step_temp
                pid.setKp(float(P))
                pid.setKi(float(I))
                pid.setKd(float(D))

                temp_set1 = OVEN.TTC_Read_SP_Temp()
                temp_real1 = OVEN.TTC_Read_PV_Temp()
                temp_set = str(format(temp_set1, "0,.2f"))
                temp_real = str(format(temp_real1, "0,.2f"))

                actual_temperature = bme280.readBME280All()[0]

                print("Sensor Temperature : " + str(actual_temperature))

                pid.update(actual_temperature)

                target_temperature = pid.output

                if target_temperature > 130:
                    target_temperature = 130
                elif target_temperature < -40:
                    target_temperature = -40
                else:
                    target_temperature = target_temperature

                print("PID set Temperature : " + str(target_temperature))
                print("Chamber real Temperature : " + temp_real)

                OVEN.TTC_Set_Temp(target_temperature)

                print('Saving data...')
                op = open("/home/pi/Desktop/" + filename + ".txt", "a")
                op.writelines([
                    str(t_run), "\t",
                    str(target_temperature), "\t", temp_real, "\t",
                    str(actual_temperature), "\r\n"
                ])
                op.close()

                time.sleep(1)

                t1 = datetime.datetime.now()
Пример #15
0
            if values is not None and len(values) == 2:
              print("PM2.5: ", values[0], ", PM10: ", values[1], "for dummy")
              time.sleep(2)
        for t in range(15):
            values = cmd_query_data();
            if values is not None and len(values) == 2:
              print("PM2.5: ", values[0], ", PM10: ", values[1])
              time.sleep(2)
              pm25.append(values[0])
              pm10.append(values[1])
        print(*pm25)
        print(*pm10)
        post_data = {'pm2' : round(sum(pm25)/len(pm25)), 'pm10' : round(sum(pm10)/len(pm10)), 'date' : time.time(), 'station_id' : '273'}

        try:
          t1,p,rh = bme280.readBME280All()
          print ("I2C Interface ")
          print ("Temperature : ", t1, "C")
          print ("Pressure : ", p, "hPa")
          print ("Humidity : ", rh, "%")
          post_data['Pressure']=p
        except:
          print("There is no i2c temperature")

        try:
            rh, t = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 4)
            post_data['temperature']=round(t,1)
            post_data['humidity']=round(rh,1)
            print (" DHT22: ")
            print ("Temperature : ", round(t,1), "C")
            print ("Humidity : ", round(rh,1), "%")
Пример #16
0
# Petr Lukas
# July, 11 2017
#
# Version 1.0

import subprocess
from configparser import ConfigParser
import urllib3
from CCS811_RPi import CCS811_RPi
import time
import json
import requests
from bme280 import readBME280All
urllib3.disable_warnings()

temperature, pressure, humidity = readBME280All(addr=0x76)

ccs811 = CCS811_RPi()
parser = ConfigParser()
parser.read('/boot/configuration.data')
lat = (parser.getfloat('airmonitor', 'lat'))
long = (parser.getfloat('airmonitor', 'long'))
sensor = (parser.get('airmonitor', 'sensor_model_co2'))
co2_values = []
tvoc_values = []

INITIALBASELINE = False
'''
MEAS MODE REGISTER AND DRIVE MODE CONFIGURATION
0b0       Idle (Measurements are disabled in this mode)
0b10000   Constant power mode, IAQ measurement every second
Пример #17
0
with open(output_tpv_name, 'a') as csvfile:
    csvwriter = csv.writer(csvfile)
    csvwriter.writerow(["TPV Data"])

#initalize first row of SKY data file
with open(output_sky_name, 'a') as csvfile:
    csvwriter = csv.writer(csvfile)
    csvwriter.writerow(["SKY Data"])

try:
    # Main data collection loop
    while True:
        current_time = time.time()  # keep track of time for each epoch
        elapsed_time = current_time - start_time
        tm = datetime.now().time()  #Current Time
        temperature, pressure, humidity = bme280.readBME280All(
        )  # Data from TPH sensor
        data = gpsd.next()  # data from the gps unit
        print("Data: ", str(data))
        print("------------------------------")
        print("\n")
        # append to the data matrix in a naive quick way
        rows.append([count, temperature, pressure, humidity, data, tm])
        #save a quick version to the backfile just in case we dont reach the final step
        with open(backup_name, 'w') as csvfile:
            csvwriter = csv.writer(csvfile)
            csvwriter.writerow(["Backup Data"])
            csvwriter.writerow(["BACKUP-SESSION", "count: ", count])
            csvwriter.writerows(rows)
            csvwriter.writerow(["BACKUP-SESSION", "count: ", count])
        #break the loop if we finish the seconds
        if elapsed_time > seconds:
 def timerEvent(self, e):
     #print  e.timerId()        
     if e.timerId()==self.timer.timerId(): # data refresh
         if self.velocitySensor <> None:
            if not self.velocitySensor.isConnected():
                #print "Usuwanie czujnika predkosci"
                self.statusBar().showMessage('Utracono połaczenie z czujnikiem ' + str(self.velocitySensor.name))
                self.velocitySensor.disconnect()
                self.velocitySensor = None
         if self.diffSensor <> None:
             if not self.diffSensor.isConnected():
                 #print "usuwanie czujnika roznicy cisnien"
                 self.statusBar().showMessage('Utracono połaczenie z czujnikiem ' + str(self.diffSensor.name))
                 self.diffSensor.disconnect()
                 self.diffSensor = None
                 
         stream1Value = None
         stream2Value = None
         date = datetime.datetime.now().strftime("%d-%m-%Y")
         time = datetime.datetime.now().strftime("%H:%M:%S\t")
         self.dateTime.setText("Aktualna data i godzina:\t" + time + date)
         
         try:
             temperature,pressure,humidity = bme280.readBME280All()
             #self.statusBar().showMessage('Odczytano czujnik BME280')
             #print "Temperature : ", temperature, "C",
             #print "Pressure : ", pressure, "hPa",
             #print "Humidity : ", humidity, "%"
             self.temperatureValue.setText("{0:.2f}".format(temperature))
             self.pressureValue.setText("{0:.2f}".format(pressure))
             self.humidityValue.setText("{0:.2f}".format(humidity))
         except IOError:
             self.setColorText(self.temperatureValue, "{0:.2f}".format(0), Qt.red)
             self.setColorText(self.pressureValue, "{0:.2f}".format(0), Qt.red)
             self.setColorText(self.humidityValue, "{0:.2f}".format(0), Qt.red)
             
         if self.velocitySensor <> None:
             self.temperatureCanalValue.setText("{0:.2f}".format(self.velocitySensor.temperature))
             self.temperatureCanalValue.setToolTip(self.velocitySensor.temperatureDT.strftime("%H:%M:%S\t\t"))
             self.velocityValue.setText("{0:.2f}".format(self.velocitySensor.velocity))
             self.velocityValue.setToolTip(self.velocitySensor.velocityDT.strftime("%H:%M:%S\t\t"))
             self.batteryDev1.setText("{0:.2f}".format(self.velocitySensor.battery))
             self.batteryDev1.setToolTip(self.velocitySensor.batteryDT.strftime("%H:%M:%S\t\t"))
         else:
             self.temperatureCanalValue.setText("{0:.2f}".format(0))
             self.velocityValue.setText("{0:.2f}".format(0))
             self.batteryDev1.setText("{0:.2f}".format(0))
             self.setColorText(self.temperatureCanalValue, "{0:.2f}".format(0), Qt.yellow)
             self.setColorText(self.velocityValue, "{0:.2f}".format(0), Qt.yellow)
             self.setColorText(self.batteryDev1, "{0:.2f}".format(0), Qt.yellow)
         
         if self.diffSensor <> None:
             self.pressureDiffValue.setText("{0:.2f}".format(self.diffSensor.differentialPressure))                
             self.pressureDiffValue.setToolTip(self.diffSensor.differentialPressureDT.strftime("%H:%M:%S\t\t"))
             self.batteryDev2.setText("{0:.2f}".format(self.diffSensor.battery))
             self.batteryDev2.setToolTip(self.diffSensor.batteryDT.strftime("%H:%M:%S\t\t"))                
         else:
             self.setColorText(self.pressureDiffValue, "{0:.2f}".format(0), Qt.yellow)
             self.setColorText(self.batteryDev2, "{0:.2f}".format(0), Qt.yellow)
             #self.pressureDiffValue.setText("{0:.2f}".format(0))
             #self.batteryDev2.setText("{0:.2f}".format(0))
             #self.batteryDev2.setStyleSheet('color: yellow')
         if self.velocitySensor <> None and self.diffSensor <> None:
             ro = 1.287
             A = 0.06745867
             roCanal = (101325.0+self.diffSensor.differentialPressure)*28.84/8314.0/(273.0+self.velocitySensor.temperature)
             m = self.velocitySensor.velocity*A*roCanal
             stream1Value = m/ro*3600
             stream2Value = m/roCanal*3600
             #print ro, A, roCanal, m, stream1Value, stream2Value
             self.stream1.setText("{0:.2f}".format(stream1Value))
             self.stream2.setText("{0:.2f}".format(stream2Value))
             self.streamKg.setText("{0:.2f}".format(m))
         else:
             self.setColorText(self.stream1, "{0:.2f}".format(0), Qt.yellow)
             self.setColorText(self.stream2, "{0:.2f}".format(0), Qt.yellow)
             self.setColorText(self.streamKg, "{0:.2f}".format(0), Qt.yellow)
         #s = np.array([time])
         #v = np.array([temperature])
         #self.staticPlt.plot(s, v, pen='r', symbol='o')
         #X = int(temperature)
         #Y = int(humidity)
         #Z = int(pressure)
         if self.velocitySensor <> None:
             self.data.pop(0)
             self.data.append(self.velocitySensor.temperature)
             self.data2.pop(0)
             self.data2.append(self.velocitySensor.velocity)
         if self.diffSensor <> None:
             self.data3.pop(0)
             self.data3.append(self.diffSensor.differentialPressure/100.0)
             
         if self.velocitySensor <> None and self.diffSensor <> None:
             if stream1Value <> None and stream2Value <> None:
                 self.dataStream.pop(0)
                 self.dataStream.append(stream2Value)
         #xdata = np.array(data, dtype='float64')
         self.curve.setData(self.data)
         self.curve2.setData(self.data2)
         self.curve3.setData(self.data3)
         self.curveStream.setData(self.dataStream)
         
     elif e.timerId()==self.timerLogging.timerId(): # data logging
         GPIO.output(16, GPIO.LOW)
         date = datetime.datetime.now().strftime("%Y-%m-%d")
         time = datetime.datetime.now().strftime("%H:%M:%S")
         
         self.writer.writerow({self.fieldnames[0]: date, \
                               self.fieldnames[1]: time, \
                               self.fieldnames[2]: self.getCleanText(self.temperatureValue.text()), \
                               self.fieldnames[3]: self.getCleanText(self.humidityValue.text()), \
                               self.fieldnames[4]: self.getCleanText(self.pressureValue.text()), \
                               self.fieldnames[5]: self.getCleanText(self.temperatureCanalValue.text()), \
                               self.fieldnames[6]: self.getCleanText(self.velocityValue.text()), \
                               self.fieldnames[7]: self.getCleanText(self.pressureDiffValue.text()), \
                               self.fieldnames[8]: self.getCleanText(self.stream1.text()), \
                               self.fieldnames[9]: self.getCleanText(self.stream2.text()), \
                               self.fieldnames[10]: self.getCleanText(self.streamKg.text()) \
                               })
         self.logCount += 1
         self.statusBar().showMessage('Wpisano rekordów do pliku z danymi: '+str(self.logCount))
     elif e.timerId()==self.timerGATTConnect.timerId():
         #print adapters            
         if self.velocitySensor == None or self.diffSensor == None:
             self.statusBar().showMessage('Wyszukiwanie urządzeń Bluetooth')
             devs = self.adapters[0].scan(timeout=3, run_as_root=True)
             #print devs
             self.statusBar().showMessage('Znaleziono urządzeń: ' + str(len(devs)))
             for dev in devs:                    
                 #print "\tUrzadzenie ", dev["name"], " o adresie: ", dev["address"]
                 
                 if dev["name"].find('T405i')<>-1 or dev["name"].find('T410i')<>-1:                        
                     self.statusBar().showMessage('Łączenie z czujnikiem ' + str(dev["name"]))
                     try:
                         newDevice = TestoDevice(dev["name"], dev["address"], self.adapters[1], self.statusBar())
                         self.velocitySensor = newDevice
                         self.statusBar().showMessage('Połączono z czujnikiem ' + str(dev["name"]))
                     except:
                         self.statusBar().showMessage('BŁĄD łączenia z czujnikiem ' + str(dev["name"]))
                 elif dev["name"].find('T510i')<>-1:
                     self.statusBar().showMessage('Łączenie z czujnikiem ' + str(dev["name"]))
                     try:
                         newDevice = TestoDevice(dev["name"], dev["address"], self.adapters[2], self.statusBar())
                         self.diffSensor = newDevice                        
                         self.statusBar().showMessage('Połączono z czujnikiem ' + str(dev["name"]))
                     except:
                         self.statusBar().showMessage('BŁĄD łączenia z czujnikiem ' + str(dev["name"]))
Пример #19
0
    current_day = datetime.datetime.utcnow().day
    if logged_day != current_day:
        logged_day = current_day
        tipping_count = 0
        optical_count = 0
        tipping_bucket_file.close()
        optical_bucket_file.close()
        metdata_file.close()
        tipping_bucket_file, optical_bucket_file, metdata_file = open_dayfile()

    # See if it's time to read the T,RH,P and log it if so
    current_minute = datetime.datetime.utcnow().minute
    if current_minute != logged_minute:
        # Time to log!
        logged_minute = current_minute
        temperature, pressure, humidity = bme280.readBME280All()
        ts = datetime.datetime.utcnow().strftime('%H:%M')
        metdata_file.write("%s,%.2f,%.2f,%.2f\n" %(ts, temperature, pressure, humidity))
        metdata_file.flush()
        tipping_bucket_file.flush()
        optical_bucket_file.flush()
        os.fsync(metdata_file.fileno())
        os.fsync(tipping_bucket_file.fileno())
        os.fsync(optical_bucket_file.fileno())
    else:
        time.sleep(5)
        print("Checking to see if I need to log the T,RH,P sensor")

    while not q.empty():
        print write_queue_element(q.get())
tipping_bucket_file.close()
Пример #20
0
def read_external_temperature():
    temp_c, pressure, humidity = bme280.readBME280All()
    temp_f = (temp_c * 1.8) + 32

    return "{:+.2f}".format(temp_c), "{:+.2f}".format(temp_f)
from bme280 import readBME280All
from time import sleep

print("---- STARTEN DER MESSWERTERFASSUNG VOM BME280 ----")
while True:

    temperature, pressure, humidity = readBME280All()
    print("Temperatur : " + str(temperature) + " C")
    print("Luftdruck : " + str(pressure) + " hPa")
    print("Feuchtigkeit : " + str(humidity) + " %")
    print("--------------------------------------------------")
    sleep(2)
Пример #22
0
def bme_280():
    temperature, pressure, humidity = bme280.readBME280All()
    return temperature, pressure, humidity
Пример #23
0
    mydir = "/".join(os.path.abspath(__file__).split("/")[:-1])
    logfiles = [
        f for f in listdir(mydir + "/logs") if isfile(join(mydir + "/logs", f))
    ]
    count = 0
    while "log" + str(count) + ".csv" in logfiles:
        count += 1
    logfile = mydir + "/logs/log" + str(count) + ".csv"
    print(logfile)

    nanonum = 0
    t = 0
    baseline_p = 0
    for i in range(50):
        temp, p, h = readBME280All()
        baseline_p += p

    baseline_p /= 50

    print(
        'a["x"], a["y"], a["z"], g["x"], g["y"], g["z"], temp, p, nanonum, t, yaw, pitch, roll, altitude(relative), altitude(sea level)'
    )
    with open(logfile, "w") as csvfile:
        csvwriter = csv.writer(csvfile, delimiter=",")
        csvwriter.writerow([
            'a["x"]', 'a["y"]', 'a["z"]', 'g["x"]', 'g["y"]', 'g["z"]', 'temp',
            'p', nanonum, 't', 'yaw', 'pitch', 'roll', 'altitude(relative)',
            'altitude(sea level)'
        ])
        csvfile.close()
Пример #24
0
def poll_sensors():
    timestamp = datetime.datetime.now().replace(microsecond=0).isoformat()
    temperature, pressure, humidity = readBME280All()
    return [timestamp, temperature, pressure, humidity, read_ppm()]
Пример #25
0
from device import ssd1306
from render import canvas
from PIL import ImageFont
from time import strftime, gmtime, sleep
import subprocess

device = ssd1306(port=2, address=0x3C)  # display in port 2 with adress 0x3C
font = ImageFont.load_default()  # font default
font_ra = ImageFont.truetype('OpenSans-Regular.ttf', 12)  # font 1
font2 = ImageFont.truetype('fontawesome-webfont.ttf', 14)  # font 2
font_cl = ImageFont.truetype('OpenSans-Regular.ttf', 32)  # font 3

try:
    while True:

        temperature, pressure, humidity = bme280.readBME280All(
        )  #weather sensor initialization
        cmd = "hostname -I | cut -d\' \' -f1 | head --bytes -1"  # command to get IP adress
        IP = subprocess.check_output(cmd, shell=True)

        with canvas(device) as draw:
            draw.text((0, 0), ("MSK"), font=font_ra, fill=255)  # "MSK"
            draw.text((40, 0),
                      strftime('%H : %M : %S'),
                      font=font_ra,
                      fill=255)  # time line to display
            draw.text((0, 16),
                      unicode("Дата", 'utf-8'),
                      font=font_ra,
                      fill=255)  # "Data" in Russian language
            draw.text((40, 16),
                      strftime('%d . %m . %y'),
    def main(self, num_samples, Father):
        RE_VAL = set()

        # Initialize Relay
        REL = relay.Relay_module()
        REL.reset()

        # detect file
        if APP_PEN_DRIVE:
            FILE_NAME = detect_file.File(folder)[0]

        # Load Profile
        TP = readTempProfile(FILE_NAME)[0]
        print(TP)

        # set PID parameters
        P = 5
        I = 0
        D = 0

        pid = PID.PID(P, I, D)
        pid.setSampleTime(1)

        # get sample number
        if APP_NEXTION_PRESENT:
            self.NEXTION_NUM_SAMPLES = num_samples
        else:
            self.NEXTION_NUM_SAMPLES = 8

        # import oven and multimeter
        if APP_OVEN_PRESENT:
            OVEN = TTC4006_Tira.TTC4006(TTC_SERIAL_PORT)
            OVEN.TTC_ON()
            OVEN.TTC_ENABLE_TEMP()

        if APP_DMM_196_PRESENT:
            Multimeter = DMM_196.DMM_196(DMM_IP, DMM_PORT)
            Multimeter.startComm()

        # create file and title
        CF = data_storage.create_file()
        test_mode = "Auto"
        equipment_Info = "TTC-4006 + DMM-196"
        Driver_root = detect_file.File(folder)[1]
        start_time = str(datetime.datetime.now())
        filename = start_time.replace(" ", "_").replace(".",
                                                        "-").replace(":", "-")
        PATH = CF.folder(Driver_root, filename)
        CF.header(PATH, filename, start_time, equipment_Info, test_mode,
                  self.NEXTION_NUM_SAMPLES)
        CF.content(PATH, filename, (
            "Time(s)\tSetTemp.(oC)\tActual Temp.(oC)\tHumidity(%)\tTemp.Sensor(oC)\tSample number\tResistence(ohm)\r\n"
        ))

        t_start = time.time()

        # temperature loop
        for step in TP:
            # setting the oven
            step_time = step[0] * 60  # step_time in seconds
            step_temp = float(format(float(step[1]) / 0.84, ".2f"))

            print(step)

            t1 = datetime.datetime.now()
            t2 = datetime.datetime.now() + datetime.timedelta(
                seconds=step_time)

            while (t1 < t2):
                # Relay switching
                REL.reset()

                for i in range(self.NEXTION_NUM_SAMPLES):
                    # run oven
                    if APP_OVEN_PRESENT:
                        temp_set1 = OVEN.TTC_Read_SP_Temp()
                        temp_real1 = OVEN.TTC_Read_PV_Temp()
                        temp_set = str(format(temp_set1, "0,.2f"))
                        temp_real = str(format(temp_real1, "0,.2f"))

                    else:
                        temp_set = format(1.00, "0.2f")
                        temp_real = format(1.00, "0.2f")

                    pid.SetPoint = step_temp
                    pid.setKp(float(P))
                    pid.setKi(float(I))
                    pid.setKd(float(D))

                    # read temperature sensor
                    # Humidity Sensor
                    # If is not OK => apply non valid temp and humidity
                    print("02 - Reading data from Humidity Sensor...")
                    if APP_BME_280_PRESENT:
                        try:
                            temperature, pressure, humidity = bme280.readBME280All(
                            )

                            # Medicine
                            if ((humidity == None) or (temperature == None)):
                                humidity = BME_280_INVALID_HUMI
                                temperature = BME_280_INVALID_TEMP
                                print(
                                    "02 - Reading data from Humidity Sensor (NONE! - ERROR)..."
                                )
                            elif ((type(humidity) == str)
                                  or (type(temperature) == str)):
                                humidity = BME_280_INVALID_HUMI
                                temperature = BME_280_INVALID_TEMP
                                print(
                                    "02 - Reading data from Humidity Sensor (INVALID STRING! - ERROR)..."
                                )

                        except:
                            humidity = BME_280_INVALID_HUMI
                            temperature = BME_280_INVALID_TEMP
                            print(
                                "02 - Reading data from Humidity Sensor (INVALID STRING! - ERROR)..."
                            )

                    else:
                        print(
                            "02 - Reading data from Humidity Sensor (DISABLED)..."
                        )
                        humidity = BME_280_INVALID_HUMI
                        temperature = BME_280_INVALID_TEMP

                    HUMI_sensor = format(humidity, "0.2f")
                    TEMP_sensor = format(temperature, "0.2f")
                    print("02 - Reading data from Humidity Sensor: Temp(oC): ",
                          TEMP_sensor)
                    print("02 - Reading data from Humidity Sensor: Humi(%): ",
                          HUMI_sensor)

                    print("Sensor Temperature : ", str(TEMP_sensor))

                    pid.update(float(TEMP_sensor))

                    target_temperature = pid.output

                    if target_temperature > 130:
                        target_temperature = 130
                    elif target_temperature < -40:
                        target_temperature = -40
                    else:
                        target_temperature = target_temperature

                    print("PID set Temperature : ", str(target_temperature))
                    print("Chamber real Temperature : ", temp_real)

                    if APP_OVEN_PRESENT:
                        OVEN.TTC_Set_Temp(target_temperature)

                    # run time
                    t_step = time.time()
                    t_r = t_step - t_start
                    t_run = format(t_r, "0.2f")

                    REL.RelaySelect(i)
                    sleep(RELAY_HOLDING_TIME)

                    # run multimeter
                    print('04- Multimeter DMM196 Reading...')
                    if APP_DMM_196_PRESENT:
                        mval = Multimeter.read_resiatance()
                    else:
                        mval = (i * float(t_run))

                    R_value = str(mval)

                    # relay reset
                    REL.RelayDeSelect(i)

                    # Persistency
                    print('06 - Saving data...')
                    result1 = []
                    result2 = []
                    result1.append([
                        str(t_run),
                        str(temp_set),
                        str(temp_real),
                        str(HUMI_sensor),
                        str(TEMP_sensor),
                        str(i),
                        str(R_value)
                    ])
                    CF.content(PATH, filename, result1)

                    # create file for each sample
                    result2.append([
                        str(t_run),
                        str(temp_set),
                        str(temp_real),
                        str(HUMI_sensor),
                        str(TEMP_sensor),
                        str(i),
                        str(R_value)
                    ])
                    CF.content(PATH, 'Sample' + str(i), result2)

                    Father.updateMultimeter([
                        temp_set, temp_real, TEMP_sensor, HUMI_sensor, t_run,
                        R_value, i
                    ])

                    DE = str(DIS.read())
                    # print (DE)
                    RE_VAL.add(DE)
                    # print (RE_VAL)

                    if "['e\\x0e\\x13\\x01\\xff\\xff\\xff']" in RE_VAL:
                        print("Exiting")
                        OVEN.TTC_OFF()
                        RE_VAL.clear()
                        DIS.write("page Device Select\xff\xff\xff")
                        return

                    elif "['e\\x0e\\x14\\x01\\xff\\xff\\xff']" in RE_VAL:
                        # DIS.write("rest\xff\xff\xff")
                        RE_VAL.clear()
                        DIS.write("page restart\xff\xff\xff")
                        os.system("sudo reboot")

                    print("07 - Updating Display...")

                t1 = datetime.datetime.now()

        if APP_OVEN_PRESENT:
            OVEN.TTC_OFF()
    def main(self,num_samples, start_voltage, end_voltage, step_voltage, Father):
        # Initialize Relay
        self.REL = relay.Relay_module()
        self.REL.reset()

        # detect file
        if APP_PEN_DRIVE:
            FILE_NAME = detect_file.File(folder)[0]
        else:
            FILE_NAME = "/home/pi/Desktop/Temperature_profile.txt"

        # Load Profile
        TP = readTempProfile(FILE_NAME)
        print(TP)
        
        #sleep(5)

        P = 5
        I = 0
        D = 0

        pid = PID.PID(P, I, D)
        pid.setSampleTime(1)

        # import oven and multimeter
        if APP_OVEN_PRESENT:
            OVEN = VT4002_SM.VT4002(VT4002_IP)
            OVEN.startComm()

        if APP_Sourcemeter_PRESENT:
            self.Sourcemeter = Sourcemeter_sweep.SourceMeter(IP_addr, PORT)
            self.Sourcemeter.startComm()

        self.NEXTION_NUM_SAMPLES = num_samples
        self.NEXTION_START_VOLTAGE = start_voltage
        self.NEXTION_END_VOLTAGE = end_voltage
        self.NEXTION_STEP_VOLTAGE = step_voltage

        # create file and title
        self.CF = data_storage.create_file()
        self.test_mode = "Auto"
        self.equipment_Info = "VT-4002 + Sourcemeter-2602"
       # Driver_root = detect_file.File(folder)[1]
        Driver_root = "/home/pi/Desktop/"
        start_time = str(datetime.datetime.now())
        self.folder_name = start_time.replace(" ", "_").replace(".", "-").replace(":", "-")
        self.CF.folder(Driver_root, self.folder_name)

        t_start = time.time()

        for step in TP:
            #create folder for each step
            self.CF.folder_SM(step)

            # setting the oven
            step_time = step[1] * 60  # step_time in seconds
            step_temp = float(format(float(step[0]) / 0.94, ".2f"))

            print(step)
            #sleep(5)

            t1 = datetime.datetime.now()
            t2 = datetime.datetime.now() + datetime.timedelta(seconds=step_time)
            t3 = datetime.datetime.now() + datetime.timedelta(seconds=10)

            counter = 0
            while (t1 < t2):
                # run oven
                print('01 - Reading data from Oven...')
                if APP_OVEN_PRESENT:
                    temp = OVEN.read_temp()
                    temp_set = temp[0]
                    temp_real = temp[1]
                else:
                    temp_set = format(1.00, "0.2f")
                    temp_real = format(1.00, "0.2f")

                # Humidity Sensor
                # If is not OK => apply non valid temp and humidity
                print('02 - Reading data from Humidity Sensor...')
                if APP_BME_280_PRESENT:
                    try:
                        temperature, pressure, humidity = bme280.readBME280All()

                        # Medicine
                        if ((humidity == None) or (temperature == None)):
                            humidity = BME_280_INVALID_HUMI
                            temperature = BME_280_INVALID_TEMP
                            print('02 - Reading data from Humidity Sensor (NONE! - ERROR)...')
                        elif ((type(humidity) == str) or (type(temperature) == str)):
                            humidity = BME_280_INVALID_HUMI
                            temperature = BME_280_INVALID_TEMP
                            print('02 - Reading data from Humidity Sensor (INVALID STRING! - ERROR)...')

                    except:
                        humidity = BME_280_INVALID_HUMI
                        temperature = BME_280_INVALID_TEMP
                        print('02 - Reading data from Humidity Sensor (INVALID STRING! - ERROR)...')

                else:
                    print('02 - Reading data from Humidity Sensor (DISABLED)...')
                    humidity = BME_280_INVALID_HUMI
                    temperature = BME_280_INVALID_TEMP

                HUMI_sensor = format(humidity, "0.2f")
                TEMP_sensor = format(temperature, "0.2f")
                print('02 - Reading data from Humidity Sensor: Temp(oC): ', TEMP_sensor)
                print('02 - Reading data from Humidity Sensor: Humi(%): ', HUMI_sensor)

                # run oven
                if APP_OVEN_PRESENT:
                    pid.SetPoint = step_temp
                    pid.setKp(float(P))
                    pid.setKi(float(I))
                    pid.setKd(float(D))

                    temp = OVEN.read_temp()
                    temp_real = str(temp[1])

                    self.actual_temperature = temperature

                    print("Sensor Temperature : " + str(self.actual_temperature))

                    pid.update(self.actual_temperature)

                    target_temperature = pid.output

                    if target_temperature > 130:
                        target_temperature = 130
                    elif target_temperature < -40:
                        target_temperature = -40
                    else:
                        target_temperature = target_temperature

                    print("PID set Temperature : " + str(target_temperature))
                    print("Chamber real Temperature : " + temp_real)

                    OVEN.set_temp(target_temperature)

                if t1 > t3 and t1 < t2 and counter < 2:
                    for i in range(self.NEXTION_NUM_SAMPLES):
                        print('03 - Swtich Relay: %d' % i)
                        self.REL.RelaySelect(i)
                        sleep(RELAY_HOLDING_TIME)

                        # create folder for each sample
                        current_time = str(datetime.datetime.now())
                        self.time_str = current_time.replace(" ", "_").replace(".", "-").replace(":", "-")

                        name = 'Sample' + str(i)
                        locals()['v' + str(i)] = i
                        PA = self.CF.sample_folder(name)
                        self.CF.header_sm(PA, self.time_str, self.time_str, self.equipment_Info, self.test_mode, self.NEXTION_NUM_SAMPLES, self.NEXTION_START_VOLTAGE,
                                    self.NEXTION_END_VOLTAGE, self.NEXTION_STEP_VOLTAGE, 10)

                        print('04 - Sourcemeter Reading...')
                        # measurement of sourcemeter
                        if APP_Sourcemeter_PRESENT:
                            data = self.Sourcemeter.Measure('a', self.NEXTION_START_VOLTAGE, self.NEXTION_END_VOLTAGE,
                                                       self.NEXTION_STEP_VOLTAGE, self)
                            self.CF.content(PA, self.time_str, data)

                        print('05 - Swtich Relay Unselection: %d' % i)
                        self.REL.RelayDeSelect(i)

                        if APP_NEXTION_PRESENT:
                            print('07 - Reading Display...')
                            RE_VAL = set()
                            DE = str(DIS.read())
                            # print (DE)
                            RE_VAL.add(DE)
                            # print (RE_VAL)

                            if "['e\\x05\\x15\\x01\\xff\\xff\\xff']" in RE_VAL:
                                DIS.write('t0.txt="Stop"')
                                OVEN.close()
                                sys.exit()

                            elif "['e\\x05\\x14\\x01\\xff\\xff\\xff']" in RE_VAL:
                                # DIS.write("rest\xff\xff\xff")
                                os.system("sudo reboot")

                            print('07 - Updating Display...')

                            Father.Update(self.updateList)

                counter += 1

                t1 = datetime.datetime.now()

        if APP_OVEN_PRESENT:
            OVEN.close()