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)
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()
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()
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()
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()
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()
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()
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()
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
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()
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()
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
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()
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()