Пример #1
0
# -*- 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
Пример #2
0
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')
Пример #3
0
#! 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,