Exemple #1
0
    def LogDataToDB(self):
        
            while globalvars.bAnswering:
                #TTLib.log("DEBUG LogDataToDB... waiting for Calculating Meteo data and statistics")
                time.sleep(1)
            
            
            TTLib.log("Logging data to Database")
            if ( self.last_measure_time == None ):
                return
            
            conn = sqlite3.connect('db/swpi.s3db',200)
            dbCursor = conn.cursor()
            #dbCursor.execute("insert into METEO(TIMESTAMP_LOCAL,TIMESTAMP_IDX,WINDIR_CODE,WIND_DIR,WIND_AVE,WIND_GUST,TEMP,PRESSURE,HUM,RAIN,RAIN_RATE,TEMPINT,HUMINT,WIND_CHILL,TEMP_APPARENT,DEW_POINT,UV_INDEX,SOLAR_RAD,WIND_DAY_MIN,WIND_DAY_MAX) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", (self.last_measure_time,self.last_measure_time,self.wind_dir_code,self.wind_dir,self.wind_ave,self.wind_gust,self.temp_out,self.abs_pressure,self.hum_out,self.rain,0,self.temp_in,self.hum_in,self.wind_chill,self.temp_apparent,self.dew_point,self.uv,self.illuminance,self.winDayMin,self.winDayMax))                        
            #print self.last_measure_time,self.last_measure_time,self.wind_dir_code,self.wind_dir,self.wind_ave,self.wind_gust,self.temp_out,self.abs_pressure,self.hum_out,self.rain,0,self.temp_in,self.hum_in,self.wind_chill,self.temp_apparent,self.dew_point,self.uv,self.illuminance,self.winDayMin,self.winDayMax,self.winDayGustMin,self.winDayGustMax,self.TempOutMin,self.TempOutMax,self.TempInMin,self.TempInMax,self.UmOutMin,self.UmOutMax,self.UmInMin,self.UmInMax,self.PressureMin,self.PressureMax,self.wind_dir_ave
            dbCursor.execute("insert into METEO(TIMESTAMP_LOCAL,TIMESTAMP_IDX,WINDIR_CODE,WIND_DIR,WIND_AVE,WIND_GUST,TEMP,PRESSURE,HUM,RAIN,RAIN_RATE,TEMPINT,HUMINT,WIND_CHILL,TEMP_APPARENT,DEW_POINT,UV_INDEX,SOLAR_RAD,WIND_DAY_MIN,WIND_DAY_MAX,WIND_DAY_GUST_MIN ,WIND_DAY_GUST_MAX ,TEMP_OUT_DAY_MIN ,TEMP_OUT_DAY_MAX,TEMP_IN_DAY_MIN ,TEMP_IN_DAY_MAX ,HUM_OUT_DAY_MIN ,HUM_OUT_DAY_MAX ,HUM_IN_DAY_MIN ,HUM_IN_DAY_MAX ,PRESSURE_DAY_MIN ,PRESSURE_DAY_MAX,WIND_DIR_AVE ) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", (self.last_measure_time,self.last_measure_time,self.wind_dir_code,self.wind_dir,self.wind_ave,self.wind_gust,self.temp_out,self.rel_pressure,self.hum_out,self.rain,self.rain_rate,self.temp_in,self.hum_in,self.wind_chill,self.temp_apparent,self.dew_point,self.uv,self.illuminance,self.winDayMin,self.winDayMax,self.winDayGustMin,self.winDayGustMax,self.TempOutMin,self.TempOutMax,self.TempInMin,self.TempInMax,self.UmOutMin,self.UmOutMax,self.UmInMin,self.UmInMax,self.PressureMin,self.PressureMax,self.wind_dir_ave))                        
            conn.commit()
            conn.close()
            msg = ""
            if self.wind_dir_code !=None :
                msg = msg + "Dir: " + str(self.wind_dir_code)
            if self.wind_ave != None :
                msg = msg + " - Spd: " + str(self.wind_ave)
            if self.wind_gust != None :
                msg = msg + " - Gst: " + str(self.wind_gust) 
            if self.temp_out != None :
                msg = msg + " - Tout: %.1f" % self.temp_out  
            if self.temp_in  != None :
                msg = msg + " - Tin: %.1f" % self.temp_in      
            if self.hum_out != None :
                msg = msg + " - Hout: %.1f" % self.hum_out      
            if self.hum_in  != None :
                msg = msg + " - Hin: %.1f" % self.hum_in                           
            if self.rel_pressure != None :
                msg = msg + " - P: %d" % self.rel_pressure   
            if self.rain != None :
                msg = msg + " - Rtot: %.1f" % self.rain     
            if self.rain_rate != None :
                msg = msg + " - RDay: %.1f" % self.rain_rate 
            if self.rain_rate_1h != None :
                msg = msg + " - R1h: %.1f" % self.rain_rate_1h 
            if self.rain_rate_24h != None :
                msg = msg + " - R24h: %.1f" % self.rain_rate_24h
            if self.cloud_base_altitude != None :
                msg = msg + " - CB: %d" % self.cloud_base_altitude   
            if self.wind_trend != None :
                msg = msg + " - Trend: %.2f" % self.wind_trend
            if self.uv != None :
                msg = msg + " - UV: %d" % self.uv
            if self.illuminance != None :
                msg = msg + " - Watts/m: %.1f" % self.illuminance				
#            if self.winDayMin != None :
#                msg = msg + " - winDayMin: %d" % self.winDayMin         
#            if self.winDayMax != None :
#                msg = msg + " - winDayMax: %d" % self.winDayMax                                         
#            if self.TempOutMin != None :
#                msg = msg + " - Tm: %d" % self.TempOutMin         
#            if self.TempOutMax != None :
#                msg = msg + " - TM: %d" % self.TempOutMax                                         
            TTLib.log(msg)
Exemple #2
0
    def LogDataToDB(self):
        
            while globalvars.bAnswering:
                #TTLib.log("DEBUG LogDataToDB... waiting for Calculating Meteo data and statistics")
                time.sleep(1)
            
            
            TTLib.log("Logging data to Database")
            if ( self.last_measure_time == None ):
                return
            
            conn = sqlite3.connect('db/swpi.s3db',200)
            dbCursor = conn.cursor()
            #dbCursor.execute("insert into METEO(TIMESTAMP_LOCAL,TIMESTAMP_IDX,WINDIR_CODE,WIND_DIR,WIND_AVE,WIND_GUST,TEMP,PRESSURE,HUM,RAIN,RAIN_RATE,TEMPINT,HUMINT,WIND_CHILL,TEMP_APPARENT,DEW_POINT,UV_INDEX,SOLAR_RAD,WIND_DAY_MIN,WIND_DAY_MAX) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", (self.last_measure_time,self.last_measure_time,self.wind_dir_code,self.wind_dir,self.wind_ave,self.wind_gust,self.temp_out,self.abs_pressure,self.hum_out,self.rain,0,self.temp_in,self.hum_in,self.wind_chill,self.temp_apparent,self.dew_point,self.uv,self.illuminance,self.winDayMin,self.winDayMax))                        
            #print self.last_measure_time,self.last_measure_time,self.wind_dir_code,self.wind_dir,self.wind_ave,self.wind_gust,self.temp_out,self.abs_pressure,self.hum_out,self.rain,0,self.temp_in,self.hum_in,self.wind_chill,self.temp_apparent,self.dew_point,self.uv,self.illuminance,self.winDayMin,self.winDayMax,self.winDayGustMin,self.winDayGustMax,self.TempOutMin,self.TempOutMax,self.TempInMin,self.TempInMax,self.UmOutMin,self.UmOutMax,self.UmInMin,self.UmInMax,self.PressureMin,self.PressureMax,self.wind_dir_ave
            dbCursor.execute("insert into METEO(TIMESTAMP_LOCAL,TIMESTAMP_IDX,WINDIR_CODE,WIND_DIR,WIND_AVE,WIND_GUST,TEMP,PRESSURE,HUM,RAIN,RAIN_RATE,TEMPINT,HUMINT,WIND_CHILL,TEMP_APPARENT,DEW_POINT,UV_INDEX,SOLAR_RAD,WIND_DAY_MIN,WIND_DAY_MAX,WIND_DAY_GUST_MIN ,WIND_DAY_GUST_MAX ,TEMP_OUT_DAY_MIN ,TEMP_OUT_DAY_MAX,TEMP_IN_DAY_MIN ,TEMP_IN_DAY_MAX ,HUM_OUT_DAY_MIN ,HUM_OUT_DAY_MAX ,HUM_IN_DAY_MIN ,HUM_IN_DAY_MAX ,PRESSURE_DAY_MIN ,PRESSURE_DAY_MAX,WIND_DIR_AVE ) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", (self.last_measure_time,self.last_measure_time,self.wind_dir_code,self.wind_dir,self.wind_ave,self.wind_gust,self.temp_out,self.rel_pressure,self.hum_out,self.rain,self.rain_rate,self.temp_in,self.hum_in,self.wind_chill,self.temp_apparent,self.dew_point,self.uv,self.illuminance,self.winDayMin,self.winDayMax,self.winDayGustMin,self.winDayGustMax,self.TempOutMin,self.TempOutMax,self.TempInMin,self.TempInMax,self.UmOutMin,self.UmOutMax,self.UmInMin,self.UmInMax,self.PressureMin,self.PressureMax,self.wind_dir_ave))                        
            conn.commit()
            conn.close()
            msg = ""
            if self.wind_dir_code !=None :
                msg = msg + "Dir: " + str(self.wind_dir_code)
            if self.wind_ave != None :
                msg = msg + " - Spd: " + str(self.wind_ave)
            if self.wind_gust != None :
                msg = msg + " - Gst: " + str(self.wind_gust) 
            if self.temp_out != None :
                msg = msg + " - Tout: %.1f" % self.temp_out  
            if self.temp_in  != None :
                msg = msg + " - Tin: %.1f" % self.temp_in      
            if self.hum_out != None :
                msg = msg + " - Hout: %.1f" % self.hum_out      
            if self.hum_in  != None :
                msg = msg + " - Hin: %.1f" % self.hum_in                           
            if self.rel_pressure != None :
                msg = msg + " - P: %d" % self.rel_pressure   
            if self.rain != None :
                msg = msg + " - Rtot: %.1f" % self.rain     
            if self.rain_rate != None :
                msg = msg + " - RDay: %.1f" % self.rain_rate 
            if self.rain_rate_1h != None :
                msg = msg + " - R1h: %.1f" % self.rain_rate_1h 
            if self.rain_rate_24h != None :
                msg = msg + " - R24h: %.1f" % self.rain_rate_24h
            if self.cloud_base_altitude != None :
                msg = msg + " - CB: %d" % self.cloud_base_altitude   
            if self.wind_trend != None :
                msg = msg + " - Trend: %.2f" % self.wind_trend
            if self.uv != None :
                msg = msg + " - UV: %d" % self.uv
            if self.illuminance != None :
                msg = msg + " - Watts/m: %.1f" % self.illuminance				
#            if self.winDayMin != None :
#                msg = msg + " - winDayMin: %d" % self.winDayMin         
#            if self.winDayMax != None :
#                msg = msg + " - winDayMax: %d" % self.winDayMax                                         
#            if self.TempOutMin != None :
#                msg = msg + " - Tm: %d" % self.TempOutMin         
#            if self.TempOutMax != None :
#                msg = msg + " - TM: %d" % self.TempOutMax                                         
            TTLib.log(msg)
Exemple #3
0
    def __init__(self, cfg=None):

        self.cfg = cfg

        self.last_measure_time = None
        self.previous_measure_time = None

        self.wind_trend = None
        self.pressure_trend = None
        # Station data
        self.idx = None
        self.status = -9999
        self.wind_dir = None
        self.wind_ave = None
        self.wind_gust = None

        self.temp_out = None
        self.hum_out = None
        self.abs_pressure = None
        self.rel_pressure = None
        self.rain = None
        self.rain_rate = None
        self.rain_rate_24h = None
        self.rain_rate_1h = None

        self.temp_in = None
        self.hum_in = None
        self.uv = None
        self.illuminance = None

        if (cfg != None):
            self.rb_wind_dir = TTLib.RingBuffer(
                cfg.number_of_measure_for_wind_dir_average)
            self.rb_wind_trend = TTLib.RingBuffer(
                cfg.number_of_measure_for_wind_trend)

        #calculated values
        self.wind_dir_code = None
        self.wind_chill = None
        self.temp_apparent = None
        self.dew_point = None
        self.cloud_base_altitude = None

        self.previous_rain = None

        self.wind_dir_ave = None

        self.battery = None

        if (not self.getLastTodayFromDB()):

            self.ResetStatistic()
Exemple #4
0
    def __init__(self, cfg):

        threading.Thread.__init__(self)

        sensor.Sensor.__init__(self, cfg)

        self.cfg = cfg
        self.bTimerRun = 0

        GPIO.setmode(GPIO.BCM)
        GPIO.setwarnings(False)
        GPIO.setup(self.__PIN_A, GPIO.IN)  # wind Speed
        GPIO.setup(self.__PIN_B1, GPIO.IN)  # B1
        GPIO.setup(self.__PIN_B2, GPIO.IN)  # B2
        if (self.cfg.sensor_type.upper() != "NEVIO4"):
            GPIO.setup(self.__PIN_B3, GPIO.IN)  # B3
        if (self.cfg.sensor_type.upper() == "NEVIO16"):
            GPIO.setup(self.__PIN_B0, GPIO.IN)  # B0
        if (self.cfg.sensor_type.upper() == "NEVIO16S"):
            GPIO.setup(self.__PIN_B0, GPIO.IN)  # B0
        if (self.cfg.sensor_type.upper() == "NEVIO16W"):
            GPIO.setup(self.__PIN_B0, GPIO.IN)  # B0
        if (self.cfg.sensor_type.upper() == "NEVIO16TT"):
            GPIO.setup(self.__PIN_B0, GPIO.IN)  # B0

        self.rb_WindSpeed = TTLib.RingBuffer(
            self.cfg.number_of_measure_for_wind_average_gust_calculation)

        self.active = True
        self.start()
Exemple #5
0
    def __init__(self, address=0x77, mode=1, debug=False):

        myrevision = TTLib.getrevision()
        if myrevision == "0002" or myrevision == "0003":
            self.i2c = I2C(address, 0)
        else:
            self.i2c = I2C(address, 1)

        self.address = address
        self.debug = debug
        # Make sure the specified mode is in the appropriate range
        if ((mode < 0) | (mode > 3)):
            if (self.debug):
                print("Invalid Mode: Using STANDARD by default")
            self.mode = self.__BMP085_STANDARD
        else:
            self.mode = mode
        # Read the calibration data
        self.readCalibrationData()
Exemple #6
0
 def __init__(self, address=0x77, mode=1, debug=False):
   
   myrevision = TTLib.getrevision()
   if myrevision == "0002" or myrevision == "0003" :
       self.i2c = I2C(address,0)
   else:
       self.i2c = I2C(address,1)
       
   self.address = address
   self.debug = debug
   # Make sure the specified mode is in the appropriate range
   if ((mode < 0) | (mode > 3)):
     if (self.debug):
       print "Invalid Mode: Using STANDARD by default"
     self.mode = self.__BMP085_STANDARD
   else:
     self.mode = mode
   # Read the calibration data
   self.readCalibrationData()
Exemple #7
0
    def __init__(self, cfg):

        threading.Thread.__init__(self)

        sensor.Sensor.__init__(self, cfg)

        self.libTX23 = cdll.LoadLibrary('./TX23/libTX23.so')
        if (self.libTX23.init() != 1):
            log("Error initializing TX23 library.Try to continue")

        self.cfg = cfg
        self.bTimerRun = 0

        self.rb_WindSpeed = TTLib.RingBuffer(
            self.cfg.number_of_measure_for_wind_average_gust_calculation)

        self.currentiDir = None

        self.active = True
        self.start()
Exemple #8
0
    def __init__(self, cfg):

        self.cfg = cfg

        threading.Thread.__init__(self)

        sensor.Sensor.__init__(self, cfg)

        myrevision = getrevision()

        if (myrevision == "a21041" or myrevision == "a01041"):
            self.model = 2
        else:
            self.model = 1

        self.model = 2  # ALWAYS USE SPI

        if (self.model == 2):
            # Open SPI bus
            log("Initializing SPI un device : /dev/spidev%d.0" %
                (cfg.mcp3002_spiDev))
            self.spi = spidev.SpiDev()
            self.spi.open(cfg.mcp3002_spiDev, 0)
        else:
            log("Initializing libMCP")
            self.libMCP = cdll.LoadLibrary('./mcp3002/libMCP3002.so')
            if (self.libMCP.init() != 0):
                log("Error initializing mcp3002 library.Try to continue")

        self.bTimerRun = 0

        GPIO.setmode(GPIO.BCM)
        GPIO.setwarnings(False)
        GPIO.setup(self.__PIN_A, GPIO.IN)  # wind Speed

        self.rb_WindSpeed = TTLib.RingBuffer(
            self.cfg.number_of_measure_for_wind_average_gust_calculation)

        self.active = True
        self.start()
Exemple #9
0
    def __init__(self, cfg):

        threading.Thread.__init__(self)

        sensor.Sensor.__init__(self, cfg)

        self.libMCP = cdll.LoadLibrary('./mcp3002/libMCP3002.so')
        if (self.libMCP.init() != 0):
            log("Error initializing mcp3002 library.Try to continue")

        self.cfg = cfg
        self.bTimerRun = 0

        GPIO.setmode(GPIO.BCM)
        GPIO.setwarnings(False)
        GPIO.setup(self.__PIN_A, GPIO.IN)  # wind Speed

        self.rb_WindSpeed = TTLib.RingBuffer(
            self.cfg.number_of_measure_for_wind_average_gust_calculation)

        self.map = intervalmap.intervalmap()
        self.map[0:75] = 5
        self.map[75:89] = 3
        self.map[89:111] = 4
        self.map[111:156] = 7
        self.map[156:214] = 6
        self.map[214:264] = 9
        self.map[264:342] = 8
        self.map[342:424] = 1
        self.map[424:514] = 2
        self.map[514:593] = 11
        self.map[593:640] = 10
        self.map[640:712] = 15
        self.map[712:769] = 0
        self.map[769:815] = 13
        self.map[815:870] = 14
        self.map[870:1024] = 12

        self.active = True
        self.start()
Exemple #10
0
    def getLastTodayFromDB(self):
        conn = sqlite3.connect('db/swpi.s3db',200)
        
        dbCursor = conn.cursor()
        try:
            dbCursor.execute("SELECT * FROM METEO where date(TIMESTAMP_LOCAL) = date('now','localtime') order by rowid desc limit 1")
        except sqlite3.Error:
            TTLib.log("Ripristino Database")
	    os.system( "sudo cp -f db/swpiori.s3db db/swpi.s3db" )
            os.system("sudo reboot")
        data = dbCursor.fetchall()
        if ( len(data) != 1):
            if conn:
                conn.close()
            return False

# "2012-10-19 11:15:50.375000"

        self.previous_measure_time = datetime.datetime.strptime(data[0][0],"%Y-%m-%d %H:%M:%S.%f")   
#        self.idx = datetime.datetime.strptime(data[0][1],"%Y-%m-%d %H:%M:%S.%f")
#        self.wind_dir_code = (data[0][2])
#        self.wind_dir = (data[0][3])
#        self.wind_ave = (data[0][4])
#        self.wind_gust = (data[0][5])
#        self.temp_out = (data[0][6])
#        self.abs_pressure = (data[0][7])
#        self.hum_out = (data[0][8])
        self.rain = (data[0][9])
        #print "-----------------------------------------",self.rain
        self.rain_rate = (data[0][10])
#        self.temp_in = (data[0][11])
#        self.hum_in = (data[0][12])
#        self.wind_chill = (data[0][13])
#        self.temp_apparent = (data[0][14])
#        self.dew_point = (data[0][15])
#        self.uv = (data[0][16])
#        self.illuminance = (data[0][17])
        self.winDayMin = (data[0][18])
        self.winDayMax = (data[0][19])
        self.winDayGustMin = (data[0][20])
        self.winDayGustMax = (data[0][21]     )   
        self.TempOutMin = (data[0][22])
        self.TempOutMax = (data[0][23])
        self.TempInMin = (data[0][24])
        self.TempInMax = (data[0][25])
        self.UmOutMin = (data[0][26])
        self.UmOutMax = (data[0][27])
        self.UmInMin = (data[0][28])
        self.UmInMax = (data[0][29])
        self.PressureMin = (data[0][30])
        self.PressureMax = (data[0][31])


        dbCursor.execute("SELECT * FROM METEO where date(TIMESTAMP_LOCAL) = date('now','localtime') order by rowid asc limit 1")
        data = dbCursor.fetchall()
        if ( len(data) == 1):
            self.previous_rain = (data[0][9])
        else:
            self.previous_rain = None
#        self.previous_measure_time = self.last_measure_time

        
        if conn:
            conn.close()
            
        return True
Exemple #11
0
    def CalcStatistics(self):
        
        while globalvars.bAnswering:
            TTLib.log("DEBUG ... waiting for Calculating Meteo data and statistics")
            time.sleep(1)
            
        TTLib.log("Calculating Meteo data and statistics")
        
        ############## Calucelated parameters
        #
 
        self.wind_chill = wind_chill(self.temp_out, self.wind_ave)
        self.temp_apparent = apparent_temp(self.temp_out, self.hum_out, self.wind_ave)
        self.dew_point = dew_point(self.temp_out, self.hum_out)
        self.cloud_base_altitude = cloud_base_altitude(self.temp_out,self.dew_point,self.cfg.location_altitude) 

        
        if ( self.cfg.wind_speed_units == "knots"):
            self.wind_ave = self.wind_ave * 0.539956803456
            self.wind_gust = self.wind_gust * 0.539956803456    
               
        self.rb_wind_trend.append(self.wind_ave)
        self.wind_trend = self.rb_wind_trend.getTrend()
        

        if ( self.cloud_base_altitude != None) : 
            self.cloud_base_altitude = self.cloud_base_altitude * self.cfg.cloudbase_calib

        
        if ( self.abs_pressure != None and self.abs_pressure != 0.0): 
            if ( self.cfg.location_altitude != 0 ):
                p0 = (self.abs_pressure*100) / pow( 1 - (0.225577000e-4*self.cfg.location_altitude ),5.25588 )
            else:
                p0 = self.abs_pressure*100
            self.rel_pressure = float(p0/100 ) 
            #print self.abs_pressure,self.rel_pressure
        
        
        if ( self.rain != None and self.previous_rain != None and self.previous_measure_time != None ):
            self.rain_rate = self.rain - self.previous_rain
        

        
        ###############################################
        
        if ( self.newday() ):
            
            self.ResetStatistic()
            

        else:
        
            if ( self.winDayMin == None or self.wind_ave < self.winDayMin ): 
                self.winDayMin  = self.wind_ave
            if ( self.winDayMax == None or self.wind_ave > self.winDayMax ) : 
                self.winDayMax  = self.wind_ave       
                
            if ( self.winDayGustMin == None or self.wind_gust < self.winDayGustMin ) : 
                self.winDayGustMin  = self.wind_gust
            if ( self.winDayGustMax == None or self.wind_gust > self.winDayGustMax ) : 
                self.winDayGustMax  = self.wind_gust                            
                     
                    
            if ( self.TempOutMin == None or self.temp_out < self.TempOutMin ) : 
                self.TempOutMin  = self.temp_out
            if ( self.TempOutMax == None or self.temp_out > self.TempOutMax ) : 
                self.TempOutMax  = self.temp_out                       
                    
                    
            if ( self.TempInMin == None or self.temp_in < self.TempInMin ) : 
                self.TempInMin  = self.temp_in
            if ( self.TempInMax == None or self.temp_in > self.TempInMax ) : 
                self.TempInMax  = self.temp_in                       
                    
                    
            if ( self.UmInMin == None or self.hum_in < self.UmInMin ) : 
                self.UmInMin  = self.hum_in
            if (  self.UmInMax == None or self.hum_in > self.UmInMax ) : 
                self.UmInMax  = self.hum_in                       
                    
            if ( self.UmOutMin == None or self.hum_out < self.UmOutMin ) : 
                self.UmOutMin  = self.hum_out
            if ( self.UmOutMax == None or self.hum_out > self.UmOutMax ) : 
                self.UmOutMax  = self.hum_out                       
                    
            if ( self.PressureMin == None or  self.rel_pressure < self.PressureMin ) : 
                self.PressureMin  = self.rel_pressure
            if ( self.PressureMax == None or self.rel_pressure > self.PressureMax ) : 
                self.PressureMax  = self.rel_pressure                       
                
        self.rb_wind_dir.append(self.wind_dir)
        self.wind_dir_ave = self.rb_wind_dir.getMeanDir()

        self.previous_measure_time = self.last_measure_time
        
        #self.previous_rain = self.rain
        
        # Rain 24h - rain 1h - pressure_trend
        if ( self.rain != None or self.rel_pressure != None):
            #try:
            conn = sqlite3.connect('db/swpi.s3db',200)    
            dbCursor = conn.cursor()
            if (self.rain != None ):
                dbCursor.execute("SELECT * FROM METEO where datetime(TIMESTAMP_LOCAL) > datetime('now','-1 day','localtime') order by rowid asc limit 1")
                data = dbCursor.fetchall()
                if ( len(data) == 1):
                    therain = (data[0][9]) 
                    if (therain != None ) :    
                        self.rain_rate_24h = self.rain - therain
                        #msg = "Rain24h :" + str(datetime.datetime.strptime(data[0][0],"%Y-%m-%d %H:%M:%S.%f")) + " " + str(therain) + " Current " +  str(self.rain)
                        #TTLib.log(msg)
            #else: print"Nodata"
            dbCursor.execute("SELECT * FROM METEO where datetime(TIMESTAMP_LOCAL) > datetime('now','-1 hour','localtime') order by rowid asc limit 1")
            data = dbCursor.fetchall()
            if ( len(data) == 1):
                therain = (data[0][9])  
                if (therain != None and self.rain != None) : 
                    self.rain_rate_1h = self.rain - therain  
                thepress= (data[0][7]) 
                if ( thepress != None and self.rel_pressure != None):
                    self.pressure_trend = self.rel_pressure - thepress
                #msg =  "Rain1h :" + str(datetime.datetime.strptime(data[0][0],"%Y-%m-%d %H:%M:%S.%f")) + " " + str(therain) + " Current " +  str(self.rain)
                #TTLib.log(msg)
            #else: print"Nodata"
            if conn:        
                conn.close()
Exemple #12
0
    def __init__(self, cfg):

        self.cfg = cfg

        self.__PIN_A = cfg.anemometer_pin

        threading.Thread.__init__(self)

        sensor.Sensor.__init__(self, cfg)

        myrevision = getrevision()

        if (myrevision == "a21041" or myrevision == "a01041"):
            self.model = 2
        else:
            self.model = 1

        self.model = 2  # ALWAYS USE SPI

        if (self.model == 2):
            # Open SPI bus
            log("Initializing SPI un device : /dev/spidev%d.0" %
                (cfg.mcp3002_spiDev))
            self.spi = spidev.SpiDev()
            self.spi.open(cfg.mcp3002_spiDev, 0)
            self.spi.max_speed_hz = 1200000  # 1.2 MHz
            self.spi.mode = 0

        else:
            log("Initializing libMCP")
            self.libMCP = cdll.LoadLibrary('./mcp3002/libMCP3002.so')
            if (self.libMCP.init() != 0):
                log("Error initializing mcp3002 library.Try to continue")

        self.bTimerRun = 0

        GPIO.setmode(GPIO.BCM)
        GPIO.setwarnings(False)
        GPIO.setup(self.__PIN_A, GPIO.IN,
                   pull_up_down=GPIO.PUD_UP)  # wind Speed

        # bouncetime = 960 / MaxSpeedKmh
        # MaxSpeedKmh = 960 / bouncetime
        if (self.windspeed_interrupt_mode == 1):
            log("Sendor Argentine: Using  Interrupt mode ")
            GPIO.add_event_detect(self.__PIN_A,
                                  GPIO.BOTH,
                                  callback=self.increaserev,
                                  bouncetime=5)
        else:
            log("Sendor Argentine: Using  pooling  mode ")

        self.rb_WindSpeed = TTLib.RingBuffer(
            self.cfg.number_of_measure_for_wind_average_gust_calculation)

        self.map = intervalmap.intervalmap()

        #PCE-SENSOR-C Cucco per oriantare correttamente i sensori
        if (self.cfg.sensor_type.upper() == "PCE-SENSOR-C"):
            self.map[0:75] = 7
            self.map[75:89] = 5
            self.map[89:111] = 6
            self.map[111:156] = 9
            self.map[156:214] = 8
            self.map[214:264] = 11
            self.map[264:342] = 10
            self.map[342:424] = 3
            self.map[424:514] = 4
            self.map[514:593] = 13
            self.map[593:640] = 12
            self.map[640:712] = 1
            self.map[712:769] = 2
            self.map[769:815] = 15
            self.map[815:870] = 0
            self.map[870:1024] = 14
        else:
            self.map[0:75] = 5
            self.map[75:89] = 3
            self.map[89:111] = 4
            self.map[111:156] = 7
            self.map[156:214] = 6
            self.map[214:264] = 9
            self.map[264:342] = 8
            self.map[342:424] = 1
            self.map[424:514] = 2
            self.map[514:593] = 11
            self.map[593:640] = 10
            self.map[640:712] = 15
            self.map[712:785] = 0
            self.map[785:815] = 13
            self.map[815:870] = 14
            self.map[870:1024] = 12

        self.active = True
        self.start()
Exemple #13
0
    def getLastTodayFromDB(self):
        conn = sqlite3.connect('db/swpi.s3db', 200)

        dbCursor = conn.cursor()
        try:
            dbCursor.execute(
                "SELECT * FROM METEO where date(TIMESTAMP_LOCAL) = date('now','localtime') order by rowid desc limit 1"
            )
        except sqlite3.Error:
            TTLib.log("Ripristino Database")
            os.system("sudo cp -f db/swpiori.s3db db/swpi.s3db")
            os.system("sudo reboot")
        data = dbCursor.fetchall()
        if (len(data) != 1):
            if conn:
                conn.close()
            return False

# "2012-10-19 11:15:50.375000"

        self.previous_measure_time = datetime.datetime.strptime(
            data[0][0], "%Y-%m-%d %H:%M:%S.%f")
        #        self.idx = datetime.datetime.strptime(data[0][1],"%Y-%m-%d %H:%M:%S.%f")
        #        self.wind_dir_code = (data[0][2])
        #        self.wind_dir = (data[0][3])
        #        self.wind_ave = (data[0][4])
        #        self.wind_gust = (data[0][5])
        #        self.temp_out = (data[0][6])
        #        self.abs_pressure = (data[0][7])
        #        self.hum_out = (data[0][8])
        self.rain = (data[0][9])
        #print "-----------------------------------------",self.rain
        self.rain_rate = (data[0][10])
        #        self.temp_in = (data[0][11])
        #        self.hum_in = (data[0][12])
        #        self.wind_chill = (data[0][13])
        #        self.temp_apparent = (data[0][14])
        #        self.dew_point = (data[0][15])
        #        self.uv = (data[0][16])
        #        self.illuminance = (data[0][17])
        self.winDayMin = (data[0][18])
        self.winDayMax = (data[0][19])
        self.winDayGustMin = (data[0][20])
        self.winDayGustMax = (data[0][21])
        self.TempOutMin = (data[0][22])
        self.TempOutMax = (data[0][23])
        self.TempInMin = (data[0][24])
        self.TempInMax = (data[0][25])
        self.UmOutMin = (data[0][26])
        self.UmOutMax = (data[0][27])
        self.UmInMin = (data[0][28])
        self.UmInMax = (data[0][29])
        self.PressureMin = (data[0][30])
        self.PressureMax = (data[0][31])

        dbCursor.execute(
            "SELECT * FROM METEO where date(TIMESTAMP_LOCAL) = date('now','localtime') order by rowid asc limit 1"
        )
        data = dbCursor.fetchall()
        if (len(data) == 1):
            self.previous_rain = (data[0][9])
        else:
            self.previous_rain = None
#        self.previous_measure_time = self.last_measure_time

        if conn:
            conn.close()

        return True
Exemple #14
0
    def CalcStatistics(self):

        while globalvars.bAnswering:
            #TTLib.log("DEBUG ... waiting for Calculating Meteo data and statistics")
            time.sleep(1)

        TTLib.log("Calculating Meteo data and statistics")

        ############## Calucelated parameters
        #

        self.wind_chill = wind_chill(self.temp_out, self.wind_ave)
        self.temp_apparent = apparent_temp(self.temp_out, self.hum_out,
                                           self.wind_ave)
        self.dew_point = dew_point(self.temp_out, self.hum_out)
        self.cloud_base_altitude = cloud_base_altitude(
            self.temp_out, self.dew_point, self.cfg.location_altitude)

        if (self.cfg.wind_speed_units == "knots"):
            self.wind_ave = self.wind_ave * 0.539956803456
            self.wind_gust = self.wind_gust * 0.539956803456

        self.rb_wind_trend.append(self.wind_ave)
        self.wind_trend = self.rb_wind_trend.getTrend()

        if (self.cloud_base_altitude != None):
            self.cloud_base_altitude = self.cloud_base_altitude * self.cfg.cloudbase_calib

        if (self.abs_pressure != None and self.abs_pressure != 0.0):
            if (self.cfg.location_altitude != 0):
                p0 = (self.abs_pressure * 100) / pow(
                    1 - (0.225577000e-4 * self.cfg.location_altitude), 5.25588)
            else:
                p0 = self.abs_pressure * 100
            self.rel_pressure = float(p0 / 100)
            #print self.abs_pressure,self.rel_pressure

        if (self.rain != None and self.previous_rain != None
                and self.previous_measure_time != None):
            self.rain_rate = self.rain - self.previous_rain

        ###############################################

        if (self.newday()):

            self.ResetStatistic()

        else:

            if (self.winDayMin == None or self.wind_ave < self.winDayMin):
                self.winDayMin = self.wind_ave
            if (self.winDayMax == None or self.wind_ave > self.winDayMax):
                self.winDayMax = self.wind_ave

            if (self.winDayGustMin == None
                    or self.wind_gust < self.winDayGustMin):
                self.winDayGustMin = self.wind_gust
            if (self.winDayGustMax == None
                    or self.wind_gust > self.winDayGustMax):
                self.winDayGustMax = self.wind_gust

            if (self.TempOutMin == None or self.temp_out < self.TempOutMin):
                self.TempOutMin = self.temp_out
            if (self.TempOutMax == None or self.temp_out > self.TempOutMax):
                self.TempOutMax = self.temp_out

            if (self.TempInMin == None or self.temp_in < self.TempInMin):
                self.TempInMin = self.temp_in
            if (self.TempInMax == None or self.temp_in > self.TempInMax):
                self.TempInMax = self.temp_in

            if (self.UmInMin == None or self.hum_in < self.UmInMin):
                self.UmInMin = self.hum_in
            if (self.UmInMax == None or self.hum_in > self.UmInMax):
                self.UmInMax = self.hum_in

            if (self.UmOutMin == None or self.hum_out < self.UmOutMin):
                self.UmOutMin = self.hum_out
            if (self.UmOutMax == None or self.hum_out > self.UmOutMax):
                self.UmOutMax = self.hum_out

            if (self.PressureMin == None
                    or self.rel_pressure < self.PressureMin):
                self.PressureMin = self.rel_pressure
            if (self.PressureMax == None
                    or self.rel_pressure > self.PressureMax):
                self.PressureMax = self.rel_pressure

        self.rb_wind_dir.append(self.wind_dir)
        self.wind_dir_ave = self.rb_wind_dir.getMeanDir()

        self.previous_measure_time = self.last_measure_time

        #self.previous_rain = self.rain

        # Rain 24h - rain 1h - pressure_trend
        if (self.rain != None or self.rel_pressure != None):
            #try:
            conn = sqlite3.connect('db/swpi.s3db', 200)
            dbCursor = conn.cursor()
            if (self.rain != None):
                dbCursor.execute(
                    "SELECT * FROM METEO where datetime(TIMESTAMP_LOCAL) > datetime('now','-1 day','localtime') order by rowid asc limit 1"
                )
                data = dbCursor.fetchall()
                if (len(data) == 1):
                    therain = (data[0][9])
                    if (therain != None):
                        self.rain_rate_24h = self.rain - therain
                        #msg = "Rain24h :" + str(datetime.datetime.strptime(data[0][0],"%Y-%m-%d %H:%M:%S.%f")) + " " + str(therain) + " Current " +  str(self.rain)
                        #TTLib.log(msg)
            #else: print"Nodata"
            dbCursor.execute(
                "SELECT * FROM METEO where datetime(TIMESTAMP_LOCAL) > datetime('now','-1 hour','localtime') order by rowid asc limit 1"
            )
            data = dbCursor.fetchall()
            if (len(data) == 1):
                therain = (data[0][9])
                if (therain != None and self.rain != None):
                    self.rain_rate_1h = self.rain - therain
                thepress = (data[0][7])
                if (thepress != None and self.rel_pressure != None):
                    self.pressure_trend = self.rel_pressure - thepress
                #msg =  "Rain1h :" + str(datetime.datetime.strptime(data[0][0],"%Y-%m-%d %H:%M:%S.%f")) + " " + str(therain) + " Current " +  str(self.rain)
                #TTLib.log(msg)
            #else: print"Nodata"
            if conn:
                conn.close()
Exemple #15
0
    def __init__(self,cfg ):
        
        threading.Thread.__init__(self)

        sensor.Sensor.__init__(self,cfg )        
        
        myrevision = getrevision()
        
        if ( myrevision == "a21041" or myrevision == "a01041"  ):
            self.model = 2
        else:
            self.model = 1
            
        #print myrevision 
        
        if ( self.model == 2 ) :
            # Open SPI bus
            log("Initializing SPI")
            self.spi  = spidev.SpiDev()
            self.spi.open(0,0)
        else: 
            log("Initializing libMCP")
            self.libMCP = cdll.LoadLibrary('./mcp3002/libMCP3002.so')
            if ( self.libMCP.init() != 0 ):
                log("Error initializing mcp3002 library.Try to continue")
        
        self.cfg = cfg
        self.bTimerRun = 0

        GPIO.setmode(GPIO.BCM)
        GPIO.setwarnings(False)
        GPIO.setup(self.__PIN_A, GPIO.IN)   # wind Speed
 
        
        self.rb_WindSpeed = TTLib.RingBuffer(self.cfg.number_of_measure_for_wind_average_gust_calculation)            
        

        self.map = intervalmap.intervalmap()
        
        #PCE-SENSOR-C Cucco per oriantare correttamente i sensori
        if ( self.cfg.sensor_type.upper()  == "PCE-SENSOR-C" ):
            self.map[0:75]    = 7
            self.map[75:89]   = 5
            self.map[89:111]  = 6
            self.map[111:156] = 9
            self.map[156:214] = 8
            self.map[214:264] = 11
            self.map[264:342] = 10
            self.map[342:424] = 3
            self.map[424:514] = 4
            self.map[514:593] = 13
            self.map[593:640] = 12
            self.map[640:712] = 1
            self.map[712:769] = 2
            self.map[769:815] = 15
            self.map[815:870] = 0
            self.map[870:1024]= 14
        else:
            self.map[0:75]    = 5
            self.map[75:89]   = 3
            self.map[89:111]  = 4
            self.map[111:156] = 7
            self.map[156:214] = 6
            self.map[214:264] = 9
            self.map[264:342] = 8
            self.map[342:424] = 1
            self.map[424:514] = 2
            self.map[514:593] = 11
            self.map[593:640] = 10
            self.map[640:712] = 15
            self.map[712:785] = 0
            self.map[785:815] = 13
            self.map[815:870] = 14
            self.map[870:1024]= 12
                            
        self.active = True
        self.start()