Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sqlite3
- import RPi.GPIO as GPIO
- import atexit
- import logging #cudna greska
- #from time import gmtime, strftime #za sistemsko vreme
- from datetime import datetime #sistemsko vreme
- from flask import Flask , render_template, request , redirect , url_for
- import pygal
- import Adafruit_DHT
- from pygal.style import DarkColorizedStyle
- from apscheduler.schedulers.background import BackgroundScheduler
- from apscheduler.triggers.interval import IntervalTrigger
- import json
- ad = Flask(__name__)
- logging.basicConfig() #cudna greska
- #primeri
- #conn = sqlite3.connect('/home/dejan/inkubatorDB') #ako putanja ne postoji napravice
- #curs = conn.cursor()
- #time = 4
- #curs.execute("select vlaznost, temp from tabela where vreme = "+ str(time))
- #info = curs.fetchall()
- #vlaznost = info[0][0]
- #print str(vlaznost)
- #curs.execute('insert into tabela values (?, ?, ?)', (str(3), str(5), str(5)))
- #conn.commit()
- #kraj primera
- #PROMENJIVE
- put='/home/pi/Baze/inkubator.db' #put ka bazi
- pinScan = 2#broj pina od senzora
- pinVentil1 = 21 #ventilator sto ide unutra (crn)
- pinVentil2 = 20 #ventilator ide napolje (ljubicast)
- pinGrejac = 16 #pin za grejanje
- interval = 10 #broj u sekundama pokretanja merenja i automatskog refresha stranice
- minHum = 10 #minimalna dozvoljena vrednost vlaznosti
- maxHum = 20 #maksimalna vrednost vlaznosti
- minTemp =20 #min Temperatura
- maxTemp =30 #max Temperatura
- brUpita = 10 #broj zadnjih skeniranja prikazanih na grafiku
- v1 = "Ugaseno"
- v2 = "Ugaseno"
- @ad.route('/')
- def index():
- global lastGraf
- ip = request.remote_addr
- idfile=open("user_id.txt", "r+")
- read= idfile.read()
- response = read.find(ip)
- if response == -1:
- idfile.write(ip + " 0" + "\n")
- idfile.close()
- return render_template('index.html' , chart = lastGraf , rate=interval , vreme = zaTabeluVreme() , temperatura = zaTabeluTemperatura() , vlaznost = zaTabeluVlaznost())
- def zaTabeluVlaznost():
- curs.execute("select Vlaznost from Vrednosti order by rowid desc limit 10")
- conn.commit()
- temp = [x[0] for x in curs.fetchall()]
- temp.reverse()
- return temp
- def zaTabeluTemperatura():
- curs.execute("select Temperatura from Vrednosti order by rowid desc limit 10")
- conn.commit()
- temp = [x[0] for x in curs.fetchall()]
- temp.reverse()
- return temp
- def zaTabeluVreme():
- curs.execute("select vreme from Vrednosti order by rowid desc limit 10")
- conn.commit()
- temp = [x[0] for x in curs.fetchall()]
- temp.reverse()
- return temp
- @ad.route('/toAdmin' , methods=['POST'])
- def toAdmin():
- ip = request.remote_addr
- textime = request.form['ime']
- textsifra = request.form['sifra']
- if(textime == "rasa" and textsifra=="rasa"):
- fil = open("user_id.txt", "r+")
- citaj = fil.readlines()
- fil.close()
- fil = open("user_id.txt", "w")
- for line in citaj:
- if line != (ip + " 0" +"\n"):
- fil.write(line)
- fil.write(ip + " 1" + "\n")
- fil.close()
- return redirect(url_for('admin'))
- else:
- return render_template('login.html', pr="Netacan unos!")
- @ad.route('/login' , methods=['POST'])
- def login():
- ip = request.remote_addr
- idfile = open("user_id.txt" , "r+")
- read = idfile.read()
- response = read.find(ip)
- response2 = read.find(ip + " 1" + "\n")
- if response == -1:
- idfile.write(ip + " 0" + "\n")
- idfile.close()
- return render_template('login.html')
- if response2 != -1:
- idfile.close()
- return redirect(url_for('toAdmin'))
- else :
- idfile.close()
- return render_template('login.html')
- @ad.route('/admin')
- def admin():
- global lastGraf
- global v1
- global v2
- ip = request.remote_addr
- idfile = open("user_id.txt" , "r+")
- read = idfile.read()
- response = read.find(ip)
- response2 = read.find(ip + " 1" + "\n")
- if response2 != -1:
- idfile.close()
- elif response == -1:
- idfile.write(ip + " 0" + "\n")
- idfile.close()
- return render_template('login.html')
- else:
- idfile.close()
- return render_template('login.html')
- return render_template('admin.html' , chart=lastGraf, rate=interval, ventilator1 = v1, ventilator2 = v2)
- @ad.route('/logout' , methods=['POST'])
- def logout():
- ip = request.remote_addr
- idfile = open("user_id.txt" , "r+")
- read = idfile.readlines()
- idfile.close()
- idfile = open("user_id.txt" , "w")
- for line in read:
- if line != (ip + " 1" +"\n"):
- idfile.write(line)
- idfile.write(ip + " 0" + "\n")
- idfile.close()
- return redirect(url_for('index'))
- @ad.route('/v1')
- def ventil1():
- global v1
- if v1 == "Ugaseno":
- GPIO.output(pinVentil1, 1)
- v1 = "Upaljeno"
- else:
- GPIO.output(pinVentil1, 0)
- v1 = "Ugaseno"
- return redirect(url_for('admin'))
- @ad.route('/v2')
- def ventil2():
- global v2
- if v2 == "Ugaseno":
- GPIO.output(pinVentil2, 1)
- v2 = "Upaljeno"
- else:
- GPIO.output(pinVentil2, 0)
- v2 = "Ugaseno"
- return redirect(url_for('admin'))
- def drawChart():
- global brUpita
- graf = pygal.Line(style = DarkColorizedStyle)
- graf.title = "Temperatura i vlaznost"
- curs.execute("select vreme from Vrednosti order by rowid desc limit " + str(brUpita))
- temp = [x[0] for x in curs.fetchall()]
- temp.reverse()
- graf.x_labels = temp
- conn.commit()
- curs.execute("select Temperatura from Vrednosti order by rowid desc limit " + str(brUpita))
- temp = [x[0] for x in curs.fetchall()]
- temp.reverse()
- graf.add('Temperatura',temp )
- conn.commit()
- curs.execute("select Vlaznost from Vrednosti order by rowid desc limit " + str(brUpita))
- temp = [x[0] for x in curs.fetchall()]
- temp.reverse()
- graf.add('Vlaznost' ,temp )
- conn.commit()
- graf.add('Min temperatura' ,allMinTemp )
- graf.add('Max temperatura' , allMaxTemp)
- graf.add('Min vlaznost' , allMinHum)
- graf.add('Max vlaznost' , allMaxHum)
- graf = graf.render_data_uri()
- return graf
- def izmeri():
- global humidity
- global temperature
- global lastGraf
- #vreme = strftime("%Y-%m-%d %H:%M:%S", gmtime())
- vreme = str(datetime.now())
- print str(vreme) + " Pocinje provera temperature"
- humidity2, temperature2 = Adafruit_DHT.read_retry(11,pinScan )
- if (humidity2 != None): humidity = humidity2
- if (temperature2 != None): temperature = temperature2
- curs.execute('insert into Vrednosti values (?,?,?,?)' , (vreme , temperature , humidity ,provera()))
- conn.commit()
- lastGraf = drawChart()
- print vreme , humidity, temperature
- @ad.route('/reset')
- def resetBazu():
- global lastGraf
- conn = sqlite3.connect(put , check_same_thread=False)
- curs = conn.cursor()
- curs.execute('delete from Vrednosti')
- conn.commit()
- lastGraf = drawChart()
- return redirect(url_for('admin'))
- def promeniVrednosti():
- global humidity
- global temperature
- temp = raw_input(" Unesi temperaturu ")
- hum = raw_input(" Unesi vlaznost ")
- temperature = temp
- humidity = hum
- curs.execute('insert into Vrednosti values (?,?,?,?)' , (vreme , temperature , humidity ,provera()))
- conn.commit()
- lastGraf = drawChart()
- kontrola()
- def kontrola(): #pali i gasi signale po potrebi
- # v1 unutra
- # v2 napolje
- x = provera()
- if (x==1):
- GPIO.output( pinGrejac, 0)
- GPIO.output(pinVentil1 , 1)
- GPIO.output(pinVentil2,0)
- elif(x==2):
- GPIO.output( pinGrejac, 1)
- GPIO.output(pinVentil1 , 0)
- GPIO.output(pinVentil2,1)
- elif(x==3):
- GPIO.output(pinVentil2,1)
- GPIO.output(pinGrejac, 0)
- GPIO.output(pinVentil1,0)
- elif(x==4):
- GPIO.output(pinVentil2,0)
- GPIO.output(pinVentil1,0)
- GPIO.output(pinGrejac, 1)
- elif(x==5):
- GPIO.output( pinGrejac, 0)
- GPIO.output(pinVentil1 , 1)
- GPIO.output(pinVentil2 , 1)
- elif(x==6):
- GPIO.output(pinGrejac,1)
- GPIO.output(pinVentil1 , 0)
- GPIO.output(pinVentil2 , 0)
- elif(x==7):
- GPIO.output(pinVentil1,1)
- GPIO.output(pinVentil2,0)
- GPIO.output(pinGrejac,0)
- elif(x==8):
- GPIO.output(pinGrejac,1)
- GPIO.output(pinVentil1,0)
- GPIO.output(pinVentil2,1)
- def provera(): # da li su vrednosti kriticne ili su ok (return se upisuje u polje Kriticno u bazi)
- #ako je 0 sve je ok
- #ako je 1 temperature je prevelika
- #ako je 2 temperatura je premala
- #ako je 3 vlaznost je preveliaka
- #ako je 4 vlaznost je premala
- #ako je 5 obe su prevelike
- #ako je 6 obe su premale
- # ako je 7 temp veliko humn malo
- #ako 8 temp malo hum veliko
- global temperature
- global humidity
- global maxHum
- global minHum
- global maxTemp
- global minTemp
- if (temperature >maxTemp):
- if(humidity>maxHum): return 5
- elif(humidity<minHum): return 7
- else: return 1
- elif (temperature<minTemp):
- if(humidity>maxHum): return 8
- elif(humidity<minHum): return 6
- else: return 2
- else:
- if(humidity>maxHum): return 3
- elif(humidity<minHum): return 4
- else: return 0
- def ugasiInkubator(): #gasi pinove pri kraju programa
- GPIO.output(pinVentil1, 0)
- GPIO.output(pinVentil2, 0)
- GPIO.output(pinGrejac,0)
- if __name__ == '__main__':
- atexit.register(ugasiInkubator)
- GPIO.setmode(GPIO.BCM)
- GPIO.setwarnings(False)
- GPIO.setup( pinVentil1 , GPIO.OUT)
- GPIO.setup( pinVentil2 , GPIO.OUT)
- GPIO.setup(pinGrejac , GPIO.OUT)
- GPIO.output(pinVentil1,0)
- GPIO.output(pinVentil2 , 0)
- GPIO.output(pinGrejac,0)
- allMinTemp=[]
- allMaxTemp=[]
- allMinHum=[]
- allMaxHum=[]
- for i in range(0,brUpita):
- allMinTemp.append(minTemp)
- allMaxTemp.append(maxTemp)
- allMinHum.append(minHum)
- allMaxHum.append(maxHum)
- #vreme = strftime("%Y-%m-%d %H:%M:%S", gmtime()) #uzima sistemsko vreme
- vreme = str(datetime.now())
- f=open("user_id.txt" , "w")
- f.close()
- conn = sqlite3.connect(put , check_same_thread=False)
- curs = conn.cursor()
- humidity, temperature = Adafruit_DHT.read_retry(11, pinScan)
- curs.execute('insert into Vrednosti values (?,?,?,?)' , (vreme , temperature , humidity ,provera()))
- conn.commit()
- lastGraf=drawChart()
- print str(vreme) + " Prva provera vlaznosti: " + str(humidity)+ " i temperature: " + str(temperature)
- #promeniVrednosti()
- zakazivac = BackgroundScheduler()
- zakazivac.start()
- zakazivac.add_job(func=izmeri , trigger=IntervalTrigger(seconds=interval))
- ad.run(debug=False , threaded=True , host='0.0.0.0' , port=1000) #vrati debug na false kad sve bude gotovo
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement