# -*- coding: utf-8 -*- #!/usr/bin/python2.7 ''' Title: ThingSpeak / RaspberryPi Weather station Author: AndyPi Hardware: DHT22 (temp / humidity) BMP085 (temp/atmospheric pressure) Shinyei PPD42NS Dust Sensor (air quality) ''' from __future__ import print_function import sys import httplib import urllib import time from collections import deque import pickle import DHT22 import pigpio import Adafruit_BMP.BMP085 import air_quality from config import * BMP085sensor = Adafruit_BMP.BMP085.BMP085() # Setup RPi GPIO pins PIN_DHT22 = 8 PIN_PPD42NS = 7 #PIN_DHT22i = 7
def main(args): # temp_high = 42.0 # temp_low = 38.0 status = 'unknown' GPIO.setmode(GPIO.BCM) GPIO.setup(23, GPIO.OUT) ##------------------------------------------------------------------------- ## Create logger object ##------------------------------------------------------------------------- logger = logging.getLogger('MyLogger') logger.setLevel(logging.DEBUG) ## Set up console output LogConsoleHandler = logging.StreamHandler() if args.verbose: LogConsoleHandler.setLevel(logging.DEBUG) else: LogConsoleHandler.setLevel(logging.INFO) LogFormat = logging.Formatter('%(asctime)23s %(levelname)8s: %(message)s') LogConsoleHandler.setFormatter(LogFormat) logger.addHandler(LogConsoleHandler) ## Set up file output now = datetime.datetime.now() DateString = '{}'.format(now.strftime('%Y%m%d')) TimeString = '{} HST'.format(now.strftime('%H:%M:%S')) LogFileName = os.path.join('/', 'var', 'log', 'Kegerator', 'Log_{}.txt'.format(DateString)) LogFileHandler = logging.FileHandler(LogFileName) LogFileHandler.setLevel(logging.DEBUG) LogFileHandler.setFormatter(LogFormat) logger.addHandler(LogFileHandler) ##------------------------------------------------------------------------- ## Get Temperature and Humidity Values ##------------------------------------------------------------------------- logger.info('#### Reading Temperature and Humidity Sensors ####') temperatures_F = [] try: logger.debug('Reading DHT22') DHT = DHT22.DHT22(pin=18) DHT.read() logger.debug(' Temperature = {:.3f} F, Humidity = {:.1f} %'.format( DHT.temperature_F, DHT.humidity)) temperatures_F.append(DHT.temperature_F) RH = DHT.humidity AH = humidity.relative_to_absolute_humidity(DHT.temperature_C, DHT.humidity) logger.debug(' Absolute Humidity = {:.2f} g/m^3'.format(AH)) except: RH = float('nan') AH = float('nan') logger.debug('Reading DS18B20') sensor = DS18B20.DS18B20() sensor.read() for temp in sensor.temperatures_C: logger.debug(' Temperature = {:.3f} F'.format(temp * 9. / 5. + 32.)) temperatures_F.append(temp * 9. / 5. + 32.) ##------------------------------------------------------------------------- ## Record Values to Table ##------------------------------------------------------------------------- datafile = os.path.join('/', 'var', 'log', 'Kegerator', '{}.txt'.format(DateString)) logger.debug( "Preparing astropy table object for data file {}".format(datafile)) if not os.path.exists(datafile): logger.info("Making new astropy table object") SummaryTable = table.Table(names=('date', 'time', 'AmbTemp', 'KegTemp', 'KegTemp1', 'KegTemp2', 'KegTemp3', 'RH', 'AH', 'status'), \ dtype=('S10', 'S12', 'f4', 'f4', 'f4', 'f4', 'f4', 'f4', 'f4', 'S8') ) else: logger.debug( "Reading astropy table object from file: {0}".format(datafile)) try: SummaryTable = ascii.read( datafile, guess=False, header_start=0, data_start=1, Reader=ascii.basic.Basic, converters={ 'date': [ascii.convert_numpy('S10')], 'time': [ascii.convert_numpy('S12')], 'AmbTemp': [ascii.convert_numpy('f4')], 'KegTemp': [ascii.convert_numpy('f4')], 'KegTemp1': [ascii.convert_numpy('f4')], 'KegTemp2': [ascii.convert_numpy('f4')], 'KegTemp3': [ascii.convert_numpy('f4')], 'hum': [ascii.convert_numpy('f4')], 'AH': [ascii.convert_numpy('f4')], 'status': [ascii.convert_numpy('S11')], }) except: logger.critical("Failed to read data file: {0} {1} {2}".format( sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])) ##------------------------------------------------------------------------- ## Turn Kegerator Relay On or Off Based on Temperature ##------------------------------------------------------------------------- temperatures_F.sort() ambient_temperature = temperatures_F.pop() assert ambient_temperature > max(temperatures_F) logger.info('Ambient Temperature = {:.1f}'.format(ambient_temperature)) for temp in temperatures_F: logger.info('Kegerator Temperatures = {:.1f} F'.format(temp)) temperature = np.median(temperatures_F) logger.info('Median Temperature = {:.1f} F'.format(temperature)) if temperature > temp_high: status = 'On' logger.info( 'Temperature {:.1f} is greater than {:.1f}. Turning freezer {}.'. format(temperature, temp_high, status)) GPIO.output(23, True) elif temperature < temp_low: status = 'Off' logger.info( 'Temperature {:.1f} is less than {:.1f}. Turning freezer {}.'. format(temperature, temp_low, status)) GPIO.output(23, False) else: if len(SummaryTable) > 0: status = SummaryTable['status'][-1] else: status = 'unknown' logger.info( 'Temperature if {:.1f}. Taking no action. Status is {}'.format( temperature, status)) ##------------------------------------------------------------------------- ## Add row to data table ##------------------------------------------------------------------------- logger.debug("Writing new row to data table.") while len(temperatures_F) < 4: temperatures_F.append(float('nan')) SummaryTable.add_row((DateString, TimeString, ambient_temperature, temperature, \ temperatures_F[0], temperatures_F[1], temperatures_F[2], \ RH, AH, status)) ## Write Table to File logger.debug(" Writing new data file.") ascii.write(SummaryTable, datafile, Writer=ascii.basic.Basic) ##------------------------------------------------------------------------- ## Log to Carriots ##------------------------------------------------------------------------- logger.info('Sending Data to Carriots') logger.debug(' Creating Device object') Device = Carriots.Client(device_id="kegerator@joshwalawender") logger.debug(' Reading api key') Device.read_api_key_from_file( file=os.path.join(os.path.expanduser('~joshw'), '.carriots_api')) data_dict = {'Temperature': temperature, \ 'Status': status } logger.debug(' Data: {}'.format(data_dict)) Device.upload(data_dict) logger.info('Done')
#! usr/bin/python import DHT22 pin = 16 dht22 = DHT22.DHT22(pin) humidity, temperature = dht22.get_temperature_and_humidity() print(humidity, temperature) #import Adafruit_DHT ''' class DHT22(): self.__init__(self,_pin): self._pin = _pin self._sensor = Adafruit_DHT.DHT22 self.get_temperature_and_humidity(self): return Adafruit_DHT.read_retry(sensor, pin) self.get_temperature(): return self.get_temperature_and_humidity()[1] self.get_humidity(): return self.get_temperature_and_humidity()[0] ''' ''' # Sensor should be set to Adafruit_DHT.DHT11,