Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import time
- import os
- import glob
- import os.path
- import datetime
- #################################################################
- #Setup local output file to store temp information for use in the event of the pi losing connection to the network
- file_name = "brew_data.txt"
- if (not(os.path.isfile(file_name))):
- tempfile = open(file_name,"w")
- tempfile.close
- with open(file_name) as f:
- try:
- saved_temp = float(f.read())
- except:
- saved_temp = None
- #################################################################
- #setup GPIO (pin BCM 11 for ssr use)
- import RPi.GPIO as GPIO
- GPIO.setwarnings(False)
- GPIO.setmode(GPIO.BCM)
- GPIO.setup(11,GPIO.OUT, initial=GPIO.LOW)
- #################################################################
- #setup temp probe
- os.system('modprobe w1-gpio')
- os.system('modprobe w1-therm')
- base_dir = '/sys/bus/w1/devices/'
- device_folder = glob.glob(base_dir + '28*')[0]
- device_file = device_folder + '/w1_slave'
- def read_temp_raw():
- f = open(device_file, 'r')
- lines = f.readlines()
- f.close()
- return lines
- def read_temp():
- lines = read_temp_raw()
- while lines[0].strip()[-3:] != 'YES':
- time.sleep(0.2)
- lines = read_temp_raw()
- equals_pos = lines[1].find('t=')
- if equals_pos != -1:
- temp_string = lines[1][equals_pos+2:]
- temp_c = float(temp_string) / 1000.0
- return temp_c
- #credits Ian Howson @ ianhowson.com for FetchOneAssoc Func
- def FetchOneAssoc(cursor):
- data = cursor.fetchone()
- if data == None:
- return None
- desc = cursor.description
- dict = {}
- for (name, value) in zip(desc, data):
- dict[name[0]] = value
- return dict
- try:
- ##################################################################
- #setup mysql connection to server
- import mysql.connector
- cnx = mysql.connector.connect(user='fermentation', password='beerbeer',
- host='192.168.1.4',
- database='fermentation')
- cursor = cnx.cursor()
- ######################################################################
- #program
- chamber_id = 1
- script_iteration_delay = 60 #how often in seconds the script is executed with cron
- query = ("""SELECT * FROM chambers JOIN fermentation on
- (chambers.active_fermentation = fermentation.f_id)
- WHERE chamber_id = """+str(chamber_id)+"""
- """)
- brew_query = cursor.execute(query)
- brew_data = (FetchOneAssoc(cursor))
- if not(brew_data == None):
- #Currently a ongoing fermentation in this chamber, proceed to edit both chamber and fermentation tables
- target_temp = brew_data['temp_c']
- current_temp = read_temp()
- element_status = 0
- element_runtime = brew_data['element_active_seconds']
- active_ferm_id = brew_data['active_fermentation']
- current_element_status = brew_data['element_active']
- if (current_element_status == 1):
- last_conn = brew_data['last_conn']
- if (not(last_conn == None)):
- f = '%Y-%m-%d %H:%M:%S'
- timestamp = time.mktime(datetime.datetime.strptime(str(last_conn), "%Y-%m-%d %H:%M:%S").timetuple())
- current_timestamp = time.time()
- script_iteration_delay = int(round(current_timestamp-timestamp,0))
- f = open(file_name, 'r+')
- f.truncate(0)
- f.write(str(float(target_temp)))
- f.close()
- if (current_temp < target_temp):
- element_status = 1
- print(str(current_temp))
- if (element_status == 1):
- GPIO.output(11,1)
- print("element on")
- element_runtime = element_runtime + script_iteration_delay
- else:
- GPIO.output(11,0)
- print("element off")
- query = ("UPDATE chambers SET last_conn = NOW(), real_time_temp="+str(current_temp)+", element_active="+str(element_status)+" WHERE chamber_id="+str(chamber_id))
- cursor.execute(query)
- cursor.execute("UPDATE fermentation SET element_active_seconds = "+str(element_runtime)+" WHERE f_id="+str(active_ferm_id))
- else:
- #No current active fermentation for this chamber, just update chamber information
- chamber_query = cursor.execute(query)
- chamber_data = FetchOneAssoc(cursor)
- current_temp = read_temp()
- element_active = 0
- GPIO.output(11,0) #failsafe
- query = ("UPDATE chambers SET last_conn=NOW(), real_time_temp = "+str(current_temp)+", element_active=0 WHERE chamber_id="+str(chamber_id))
- cursor.execute(query)
- open(file_name,"w").close() #clear contents of file
- cnx.commit()
- cnx.close()
- except Exception as e:
- print("exception: " + str(e))
- #Error in processing query, clean up by checking saved file
- current_temp = read_temp() #get temp in C
- if (saved_temp == None):
- print("No saved temp, turn off element")
- GPIO.output(11,0)
- else:
- if (saved_temp > current_temp):
- #turn element on
- print("Saved temp "+str(saved_temp))
- print("Current temp "+str(current_temp))
- print("Element on")
- GPIO.output(11,1)
- else:
- #turn element off
- print ("Saved temp "+str(saved_temp))
- print ("Current temp "+str(current_temp))
- print ("Element off")
- GPIO.output(11,0)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement