Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- import sys
- import RPi.GPIO as GPIO
- import time
- import MySQLdb
- import pickle
- from datetime import datetime, date
- pins = [17,18,22,23]
- prev = [0,0,0,0]
- on = [0,1,1,0]
- try:
- f = open('state', 'r')
- prev = pickle.load(f)
- except:
- print('no previous state')
- db = MySQLdb.connect('localhost','monitor','***','furnace')
- def checkInput(pin, prev_value, on_value):
- input = GPIO.input(pin)
- if (prev_value != input):
- print('%s changed: %s' %(pin,input))
- c = db.cursor()
- try:
- if (input == on_value):
- c.execute("""insert into log_event (pin) values (%d)""" % pin)
- else:
- c.execute("""update log_event set off_time = CURRENT_TIMESTAMP where pin = %d and off_time is null""" % pin)
- db.commit()
- except MySQLdb.Error, e:
- print "Unexpected error: %s" % e
- db.rollback()
- f = open('state','w')
- pickle.dump(prev, f)
- f.close()
- return input
- def heartbeat():
- cur_input = [GPIO.input(pins[0]),GPIO.input(pins[1]),GPIO.input(pins[2]),GPIO.input(pins[3])]
- print('heartbeat: %s,%s,%s,%s' % tuple(cur_input))
- c = db.cursor()
- try:
- c.execute("""insert into heartbeat (p17,p18,p22,p23) values (%d,%d,%d,%d)""" % tuple(cur_input))
- db.commit()
- except:
- db.rollback()
- return datetime.now()
- try:
- GPIO.setmode(GPIO.BCM)
- for i in range(len(pins)):
- GPIO.setup(pins[i],GPIO.IN)
- prev[i] = GPIO.input(pins[i])
- last_beat = heartbeat()
- while True:
- for i in range(len(pins)):
- prev[i] = checkInput(pins[i], prev[i], on[i])
- if ((datetime.now() - last_beat).total_seconds() >= 60):
- last_beat = heartbeat()
- f = open('state','w')
- pickle.dump(prev, f)
- f.close()
- time.sleep(0.5)
- except:
- l = open('error.log','w')
- l.write(sys.exc_info()[0])
- l.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement