예제 #1
0
import sht21
import time
import datetime

# Example for using the SHT21 Breakoutboard with the Raspberry Pi. Martin Steppuhn, www.emsystech.de
#
# This script appends as measurement of SHT21 to as simple Logfile.
#
# Example:
# 16.06.2015 13:44:00     24.2    44
# 16.06.2015 13:44:30     24.5    43
# 16.06.2015 13:45:00     24.5    43
# 16.06.2015 13:45:30     24.3    42

sht21 = sht21.SHT21()

interval = 5  # Intervall for measurement
file = "log_loop.txt"  # File for Datastorage

print("SHT21-Demo: Write measurement data every", interval, "seconds to", file)

while 1:
    if ((int(time.time()) % interval) == 0):
        try:
            (temp, humidity) = sht21.measure(1)
            timestamp = '{:%d.%m.%Y %H:%M:%S}'.format(datetime.datetime.now())
            s = "%s\t%s\t%d" % (timestamp, temp, humidity)
        except:
            s = "SHT21 I/O Error"
        print(s)
예제 #2
0
#! /usr/bin/env python
#coding: utf-8
import subprocess
import sys
sys.path.append('/usr/local/lib/python2.7/site-packages')
import time
import sht21  # SHT2xのライブラリをimportする。試験

# 現在時刻の取得
now = time.strftime('%Y-%m-%d %H:%M:%S')
#----------------------
#SHT-25による温湿度計測
#----------------------
with sht21.SHT21(1) as sht21:
  temp = float(sht21.read_temperature())
  humi = float(sht21.read_humidity())


#----------------------
# AEH11による照度計測
#----------------------
# プログラム実行時のパラメータを有無を確認する
argvs = sys.argv
argc = len(argvs)
if (argc>1):
  reso = sys.argv[1]
else:
  reso = ""

senseillu= 0x0102  # Sensor illuminate of AEH11
I2CGET = "/usr/sbin/i2cget -y 1 "      # 最後の1はBUS IDなので現物に合わせて
예제 #3
0
else:
    vore=str(int(ore))
    
if min=="00":
    vmin = "in punto"
elif min=="30":
    vmin = "e mezza"
    if ore=="12":
        vmin = "e mezzo"
else:
    vmin= "e "  +  str(int(min))


espeak.synth(hinit + " "+vore + " " + vmin + ".")

with sht21.SHT21(0) as sht21:
    print "Temperature: %s"%sht21.read_temperature()
    print "Humidity: %s"%sht21.read_humidity()
    tmp=round(sht21.read_temperature(), 1)
    hum=int(round(sht21.read_humidity(),0))
#    espeak.synth("Sono " + str(tmp) + " gradi centigradi e " + str(hum) + " percento di umidità relativa.")
    

#espeak.synth("Dlin dlon Dlin Dlon, qualche rompicazzo sta suonando alla porta")

#while espeak.is_playing:
#    time.sleep(0.1)

time.sleep(5)

print("ciao ancora")
예제 #4
0
import machine
import sht21
import bmp280
import time
import collectd
import uos
import weather
import sh1106

# Start up I2C
i2c = machine.I2C(sda=machine.Pin(21), scl=machine.Pin(22), freq=400000)

sens = sht21.SHT21(i2c)
bmp = bmp280.BMP280(i2c=i2c)
adc = machine.ADC(machine.Pin(35))

disp = sh1106.SH1106_I2C(128, 64, i2c)

led = machine.Pin(5, machine.Pin.OUT)
led.value(1)

disp.init_display()
disp.invert(False)
disp.rotate(True)
disp.fill(1)
disp.show()
time.sleep_ms(200)
disp.fill(0)
disp.show()

send_adc = False
예제 #5
0
    def runIO(self, board_id, board_type_id, board_n):
        """
        Si occupa di leggere e scrivere i valori degli IO
        """

        # self.log('Self.Mboard', self.mBoard)
        if board_type_id == 0:  # None
            pass

        elif board_type_id == 1:  # I2C
            try:
                # self.log('mBoard', self.mBoard)
                if self.mBoard[BOARD_UPDATE][
                        board_n] == 1:  # se board_update e' settato:
                    self.mBoard[BOARD_BIN_VAL][board_n] = self.mBoard[
                        BOARD_BIN_VAL_NEW][
                            board_n]  # Aggiorna board_bin_val con board_bin_val_new
                    self.write_i2c(self.mBoard[BOARD_ADDRESS][board_n],
                                   (self.mBoard[BOARD_BIN_VAL][board_n]
                                    | self.mBoard[BOARD_DIRECTION][board_n]
                                    ))  # Aggiorna I2C out
                    self.mBoard[BOARD_UPDATE][board_n] = 0

                board_id_i2c_val = self.read_i2c(
                    self.mBoard[BOARD_ADDRESS]
                    [board_n])  # Get byte valore I2C board
                if self.mBoard[BOARD_BIN_VAL][
                        board_n] != board_id_i2c_val:  # check if board_bin_val e' cambiato
                    self.mBoard[BOARD_BIN_VAL_NEW][board_n] = self.mBoard[
                        BOARD_BIN_VAL][
                            board_n] = board_id_i2c_val  # aggiorna board_bin_val
                    self.write_i2c(self.mBoard[BOARD_ADDRESS][board_n],
                                   (self.mBoard[BOARD_BIN_VAL][board_n]
                                    | self.mBoard[BOARD_DIRECTION][board_n]
                                    ))  # Aggiorna I2C out
            except:
                pass

        elif board_type_id == 2:  # RS485
            pass

        elif board_type_id == 3:  # Webs
            if self.mBoard[BOARD_UPDATE][board_n] == 1:
                self.mBoard[BOARD_BIN_VAL][board_n] = self.mBoard[
                    BOARD_BIN_VAL_NEW][board_n]
                self.mBoard[BOARD_UPDATE][board_n] = 0

        elif board_type_id == 4 or board_type_id == 6:  # Temperature + humidity
            try:
                a = sht21.SHT21(self.i2c)
                if board_type_id == 4:
                    time.sleep(0.33)
                    temperature = round(a.read_temperature(), 1)
                    self.mBoard[BOARD_BIN_VAL][board_n] = temperature
                    q = 'INSERT INTO sensor (type, value) VALUES("{}", "{}");'.format(
                        '1', temperature)
                    self.db.query(q)
                if board_type_id == 6:
                    time.sleep(0.5)
                    humidity = round(a.read_humidity(), 0)
                    self.mBoard[BOARD_BIN_VAL][board_n] = humidity
                    q = 'INSERT INTO sensor (type, value) VALUES("{}", "{}");'.format(
                        '2', humidity)
                    self.db.query(q)
            except:
                pass
            time.sleep(60)

        elif board_type_id == 5:  # PD9535
            pass

        elif board_type_id == 7:  # GPIO
            """
            Example GPIO OUT
            """
            # print self.pi.get_current_tick() # Tick in uS from started
            # print self.pi.get_hardware_revision() # Hardware revision
            print bin(self.pi.read_bank_1())  # Get GPIO status in block
            b1 = self.pi.read_bank_1()
            # print bin(self.pi.read_bank_2()) # Get GPIO status in block
            b1 = self.setBit(b1, 16, 1)
            print bin(b1)

            # self.pi.set_bank_1(b1)

            pass

        # print self.mBoard[6]
        self.mBoard[BOARD_THREAD][board_n] = 0
예제 #6
0
class tstat():

    temp_sensor = sht21.SHT21(1)

    TempRange = 2.0
    MAX_PRIORITY = 10
    MIN_PRIORITY = 0

    HEAT1 = 1
    HEAT2 = 2
    COOL1 = -1
    COOL2 = -2
    IDLE = 0

    COOLING1_RELAY = 2
    COOLING2_RELAY = 3
    HEATING1_RELAY = 4
    HEATING2_RELAY = 5
    FAN_RELAY = 1

    HEAT_MODE = 2
    COOL_MODE = 1
    OFF_MODE = 0

    last_switch_time = time.time()  #initialize last switch time

    tempData = 0
    requested_mode = 0

    def __init__(self, z):
        self.zonenum = z
        self.setPoint = settings[1]
        self.deadband = settings[4]
        self.min_switch_time = settings[3]
        self.set_to_manual()

    def set_to_manual(self):
        relays.relaySetup()

        #Turn off rtu for fresh start
        self.set_mode(self.IDLE)

    def read_temp(self):
        temp = float(self.temp_sensor.read_temperature())
        return temp

    def set_setpoint(self, setpoint):
        if setpoint > 80:
            setpoint = 80

        if setpoint < 60:
            setpoint = 60

        self.setPoint = setpoint

    def read_setpoint(self):
        return self.setPoint

    def heat_cool_request(self):

        #only activate if 0.1 degree(F) over setpoint
        if self.temp > self.read_setpoint() + self.deadband:
            return self.COOL_MODE

        elif self.temp < self.read_setpoint() - self.deadband:
            return self.HEAT_MODE

        else:
            return self.OFF_MODE

    def get_mode(self):
        return self.read_mode()

    ##Read Mode
    def read_mode(self):
        #Read the relays
        c1 = relays.relayRead(self.COOLING1_RELAY)
        c2 = relays.relayRead(self.COOLING2_RELAY)
        h1 = relays.relayRead(self.HEATING1_RELAY)
        h2 = relays.relayRead(self.HEATING2_RELAY)

        if (h1 == 0 and c1 == 0 and h2 == 0 and c2 == 0):
            mode = self.IDLE

        elif (h1 != 0 and c1 == 0 and c2 == 0):

            if (h2 != 0):
                mode = self.HEAT2
            else:
                mode = self.HEAT1

        elif (h1 == 0 and c1 != 0 and h2 == 0):

            if (c2 != 0):
                mode = self.COOL2
            else:
                mode = self.COOL1

        else:
            assert (False)

        return mode

##Find if tstat is active

    def is_active(self):

        current_mode = self.read_mode()

        if (current_mode != self.IDLE):
            is_on = 1
        elif (current_mode == self.IDLE):
            is_on = 0

        return is_on

#Find if tstat can switch
#last_switch_time assigned in activate method

    def switchable(self):
        if (time.time() - self.last_switch_time > self.min_switch_time
            ):  #sets short cycle limits (has been at 10min)
            can_switch = 1
        elif (time.time() - self.last_switch_time <= self.min_switch_time):
            can_switch = 0
        return can_switch

    def set_mode(self, hvac_mode):

        print("SETTING MODE " + str(hvac_mode))

        heat1_relay = self.HEATING1_RELAY
        heat2_relay = self.HEATING2_RELAY
        cool1_relay = self.COOLING1_RELAY
        cool2_relay = self.COOLING2_RELAY

        if (hvac_mode == self.COOL1):

            relays.relayClear(heat1_relay)  # Heater 1 off
            relays.relayClear(heat2_relay)  # Heater 2 off
            relays.relayClear(cool2_relay)  # Cooler 2 off
            relays.relaySet(cool1_relay)  # Cooler 1 on

        elif (hvac_mode == self.COOL2):

            relays.relayClear(heat1_relay)  # Heater 1 off
            relays.relayClear(heat2_relay)  # Heater 2 off
            relays.relaySet(cool2_relay)  # Cooler 2 on
            relays.relaySet(cool1_relay)  # Cooler 1 on

        elif (hvac_mode == self.HEAT1):

            relays.relayClear(heat2_relay)  # Heater 2 off
            relays.relayClear(cool1_relay)  # Cooler 1 off
            relays.relayClear(cool2_relay)  # Cooler 2 off
            relays.relaySet(heat1_relay)  # Heater 1 on

        elif (hvac_mode == self.HEAT2):

            relays.relayClear(cool1_relay)  # Cooler 1 off
            relays.relayClear(cool2_relay)  # Cooler 2 off
            relays.relaySet(heat1_relay)  # Heater 1 on
            relays.relaySet(heat2_relay)  # Heater 2 on

        else:

            relays.relayClear(cool1_relay)  # Cooler 1 off
            relays.relayClear(cool2_relay)  # Cooler 2 off
            relays.relayClear(heat1_relay)  # Heater 1 off
            relays.relayClear(heat2_relay)  # Heater 2 off

# Actuate the fan if fan is in auto mode
        if (hvac_mode == self.IDLE):
            relays.relayClear(self.FAN_RELAY)
            # Fan off
        else:
            relays.relaySet(self.FAN_RELAY)
            # Fan on

    #Calculate priority
    def calculate_priority(self):

        min_prior = self.MIN_PRIORITY
        max_prior = self.MAX_PRIORITY

        tempData = self.read_temp()
        setP = self.read_setpoint()

        requested_mode = self.heat_cool_request()

        current_priority = 0
        temp_per_priority = self.TempRange / (max_prior - min_prior)
        temp_diff = tempData - setP

        if (requested_mode == self.HEAT_MODE and temp_diff < 0.0):
            current_priority = min_prior + math.ceil(
                -temp_diff / temp_per_priority)

        elif (requested_mode == self.COOL_MODE and temp_diff > 0.0):
            current_priority = min_prior + math.ceil(
                temp_diff / temp_per_priority)

        else:
            current_priority = 0.0

        if (current_priority > max_prior):
            current_priority = max_prior

        #was causing an issue distinguishing between floats and ints
        if (current_priority == max_prior):
            current_priority = int(current_priority)

        return current_priority

    ##Scan for operating data
    def poll_request(self):

        #method will return poll (list of scan data)
        #format for lists is ID, priority, is on (bool), mode, can switch (bool)
        poll = []
        for i in range(0, 5):
            poll.append(None)

        poll[0] = self.zonenum

        priority = self.calculate_priority()
        poll[1] = priority

        active_status = self.is_active()
        poll[2] = active_status

        current_mode = self.read_mode()
        poll[3] = current_mode

        switch_abil = self.switchable()
        poll[4] = switch_abil

        #Check to see if hvac unit has been turned off
        #if(settings.heat_cool == 'OFF'):
        #self.set_mode(self.IDLE)

        ##Add FAN ONLY check option
        #elif(settings.heat_cool == 'FAN ONLY'):
        #self.set_mode(self.IDLE)
        #time.sleep(.25)
        #       relays.relaySet(self.FAN_RELAY)

        return poll

    def activate(self):
        try:
            tempData = self.read_temp()
        except IOError:
            print("Failed to read temp sensor")
            time.sleep(0.35)
            self.activate()

        setPoint = self.read_setpoint()
        current_mode = self.read_mode()
        requested_mode = self.heat_cool_request()

        if (self.switchable() == 0):
            return

        temp_diff = tempData - setPoint

        if (temp_diff > 0.0 and requested_mode == self.COOL_MODE):
            if (temp_diff > self.TempRange):
                hvac_mode = self.COOL2
            else:
                hvac_mode = self.COOL1

        elif (temp_diff < 0.0 and requested_mode == self.HEAT_MODE):
            if (-temp_diff > self.TempRange):
                hvac_mode = self.HEAT2
            else:
                hvac_mode = self.HEAT1

        else:
            hvac_mode = self.IDLE

        if (current_mode != hvac_mode):
            current_mode = hvac_mode
            self.last_switch_time = time.time()
            self.set_mode(hvac_mode)

    def shutdown(self):

        if (self.switchable() == 0):
            return
        if (self.read_mode() != self.IDLE):
            current_mode = self.IDLE
            self.last_switch_time = time.time()
            self.set_mode(self.IDLE)