Advertisement
Stefan1999

susara

May 24th, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.94 KB | None | 0 0
  1. import sqlite3
  2. import RPi.GPIO as GPIO
  3. import atexit
  4. import logging #cudna greska
  5. #from time import gmtime, strftime #za sistemsko vreme
  6. from datetime import datetime #sistemsko vreme
  7. from flask import Flask , render_template, request , redirect , url_for
  8. import pygal
  9. import Adafruit_DHT
  10. from pygal.style import DarkColorizedStyle
  11. from apscheduler.schedulers.background import BackgroundScheduler
  12. from apscheduler.triggers.interval import IntervalTrigger
  13. import json
  14. ad = Flask(__name__)
  15. logging.basicConfig() #cudna greska
  16. #primeri
  17. #conn = sqlite3.connect('/home/dejan/inkubatorDB') #ako putanja ne postoji napravice
  18. #curs = conn.cursor()
  19. #time = 4
  20. #curs.execute("select vlaznost, temp from tabela where vreme = "+ str(time))
  21. #info = curs.fetchall()
  22. #vlaznost = info[0][0]
  23. #print str(vlaznost)
  24. #curs.execute('insert into tabela values (?, ?, ?)', (str(3), str(5), str(5)))
  25. #conn.commit()
  26. #kraj primera
  27.  
  28. #PROMENJIVE
  29. put='/home/pi/Baze/inkubator.db' #put ka bazi
  30. pinScan = 2#broj pina od senzora
  31. pinVentil1 = 21 #ventilator sto ide unutra (crn)
  32. pinVentil2 = 20 #ventilator ide napolje  (ljubicast)
  33. pinGrejac = 16  #pin za grejanje
  34. interval =  10 #broj u sekundama pokretanja merenja i automatskog refresha stranice
  35. minHum = 10  #minimalna dozvoljena vrednost vlaznosti
  36. maxHum = 20  #maksimalna vrednost vlaznosti
  37. minTemp =20  #min Temperatura
  38. maxTemp =30  #max Temperatura
  39. brUpita = 10 #broj zadnjih skeniranja prikazanih  na grafiku
  40. v1 = "Ugaseno"
  41. v2 = "Ugaseno"
  42. @ad.route('/')
  43. def index():
  44.     global lastGraf
  45.     ip = request.remote_addr
  46.     idfile=open("user_id.txt", "r+")
  47.     read= idfile.read()
  48.     response = read.find(ip)
  49.     if response == -1:
  50.         idfile.write(ip + " 0" + "\n")
  51.         idfile.close()
  52.     return render_template('index.html' , chart = lastGraf , rate=interval , vreme = zaTabeluVreme() , temperatura = zaTabeluTemperatura() , vlaznost = zaTabeluVlaznost())
  53.  
  54. def zaTabeluVlaznost():
  55.     curs.execute("select Vlaznost from Vrednosti order by rowid desc limit 10")
  56.     conn.commit()
  57.     temp = [x[0] for x in curs.fetchall()]
  58.     temp.reverse()
  59.     return temp
  60.  
  61. def zaTabeluTemperatura():
  62.     curs.execute("select Temperatura from Vrednosti order by rowid desc limit  10")
  63.     conn.commit()
  64.     temp = [x[0] for x in curs.fetchall()]
  65.     temp.reverse()
  66.     return temp
  67.  
  68. def zaTabeluVreme():
  69.     curs.execute("select vreme from Vrednosti order by rowid desc limit  10")  
  70.     conn.commit()  
  71.     temp = [x[0] for x in curs.fetchall()]
  72.     temp.reverse()
  73.     return temp
  74.  
  75. @ad.route('/toAdmin' , methods=['POST'])
  76. def toAdmin():
  77.     ip = request.remote_addr
  78.     textime = request.form['ime']
  79.     textsifra = request.form['sifra']  
  80.     if(textime == "rasa" and textsifra=="rasa"):
  81.         fil = open("user_id.txt", "r+")
  82.         citaj = fil.readlines()
  83.         fil.close()
  84.         fil = open("user_id.txt", "w")
  85.         for line in citaj:
  86.             if line != (ip + " 0" +"\n"):
  87.                 fil.write(line)
  88.         fil.write(ip + " 1" + "\n")
  89.         fil.close()    
  90.  
  91.         return redirect(url_for('admin'))
  92.     else:
  93.         return render_template('login.html', pr="Netacan unos!")   
  94.  
  95. @ad.route('/login' , methods=['POST'])
  96. def login():
  97.     ip = request.remote_addr
  98.     idfile = open("user_id.txt" , "r+")
  99.     read = idfile.read()
  100.     response = read.find(ip)
  101.     response2 = read.find(ip + " 1" + "\n")
  102.  
  103.     if response == -1:
  104.         idfile.write(ip + " 0" + "\n")
  105.         idfile.close()
  106.         return render_template('login.html')
  107.     if response2 != -1:
  108.         idfile.close()
  109.         return redirect(url_for('toAdmin'))
  110.     else :
  111.         idfile.close()
  112.         return render_template('login.html')
  113.    
  114.  
  115. @ad.route('/admin')
  116. def admin():
  117.     global lastGraf
  118.     global v1
  119.     global v2
  120.     ip = request.remote_addr
  121.     idfile = open("user_id.txt" , "r+")
  122.     read = idfile.read()
  123.     response = read.find(ip)
  124.     response2 = read.find(ip + " 1" + "\n")
  125.     if response2 != -1:
  126.         idfile.close()
  127.     elif response == -1:
  128.         idfile.write(ip + " 0" + "\n")
  129.         idfile.close()
  130.         return render_template('login.html')   
  131.     else:
  132.         idfile.close()
  133.         return render_template('login.html')
  134.     return render_template('admin.html' , chart=lastGraf, rate=interval,  ventilator1 = v1, ventilator2 = v2)
  135.  
  136. @ad.route('/logout' , methods=['POST'])
  137. def logout():
  138.     ip = request.remote_addr
  139.     idfile = open("user_id.txt" , "r+")
  140.     read = idfile.readlines()
  141.     idfile.close()
  142.     idfile = open("user_id.txt" , "w")
  143.     for line in read:
  144.         if line != (ip + " 1" +"\n"):
  145.             idfile.write(line)
  146.     idfile.write(ip + " 0" + "\n")
  147.     idfile.close() 
  148.     return redirect(url_for('index'))
  149.  
  150. @ad.route('/v1')
  151. def ventil1():
  152.     global v1
  153.     if v1 == "Ugaseno":
  154.         GPIO.output(pinVentil1, 1)
  155.         v1 = "Upaljeno"
  156.     else:
  157.         GPIO.output(pinVentil1, 0)
  158.         v1 = "Ugaseno"
  159.  
  160.     return redirect(url_for('admin'))
  161.  
  162. @ad.route('/v2')
  163. def ventil2():
  164.     global v2
  165.     if v2 == "Ugaseno":
  166.         GPIO.output(pinVentil2, 1)
  167.         v2 = "Upaljeno"
  168.     else:
  169.         GPIO.output(pinVentil2, 0)
  170.         v2 = "Ugaseno"
  171.  
  172.     return redirect(url_for('admin'))
  173.  
  174. def drawChart():
  175.     global brUpita 
  176.     graf = pygal.Line(style = DarkColorizedStyle)
  177.     graf.title = "Temperatura i vlaznost"
  178.     curs.execute("select vreme from Vrednosti order by rowid desc limit " + str(brUpita))
  179.     temp = [x[0] for x in curs.fetchall()]
  180.     temp.reverse()
  181.     graf.x_labels = temp
  182.     conn.commit()
  183.     curs.execute("select Temperatura from Vrednosti order by rowid desc  limit " + str(brUpita))
  184.     temp = [x[0] for x in curs.fetchall()]
  185.     temp.reverse()
  186.     graf.add('Temperatura',temp )
  187.     conn.commit()
  188.     curs.execute("select Vlaznost from Vrednosti order by rowid desc limit " + str(brUpita))
  189.     temp = [x[0] for x in curs.fetchall()]
  190.     temp.reverse()
  191.     graf.add('Vlaznost' ,temp )
  192.     conn.commit()
  193.     graf.add('Min temperatura' ,allMinTemp )
  194.     graf.add('Max temperatura' , allMaxTemp)
  195.     graf.add('Min vlaznost' ,  allMinHum)
  196.     graf.add('Max vlaznost' , allMaxHum)
  197.     graf = graf.render_data_uri()
  198.     return graf
  199.  
  200. def izmeri():
  201.     global humidity
  202.     global temperature
  203.     global lastGraf
  204.     #vreme = strftime("%Y-%m-%d %H:%M:%S", gmtime())
  205.     vreme = str(datetime.now())
  206.     print str(vreme) + " Pocinje provera temperature"
  207.     humidity2, temperature2  = Adafruit_DHT.read_retry(11,pinScan )
  208.     if (humidity2 != None): humidity  = humidity2
  209.     if (temperature2 != None): temperature = temperature2
  210.     curs.execute('insert into Vrednosti values (?,?,?,?)' , (vreme , temperature , humidity ,provera()))
  211.     conn.commit()
  212.     lastGraf = drawChart()
  213.     print vreme , humidity, temperature
  214.  
  215. @ad.route('/reset')
  216. def resetBazu():
  217.     global lastGraf
  218.     conn = sqlite3.connect(put , check_same_thread=False)
  219.     curs = conn.cursor()
  220.     curs.execute('delete from Vrednosti')
  221.     conn.commit()
  222.     lastGraf = drawChart()
  223.     return  redirect(url_for('admin'))
  224.  
  225.  
  226. def promeniVrednosti():
  227.     global humidity
  228.     global temperature
  229.     temp  = raw_input(" Unesi temperaturu ")
  230.     hum = raw_input(" Unesi vlaznost ")
  231.     temperature = temp
  232.     humidity = hum
  233.     curs.execute('insert into Vrednosti values (?,?,?,?)' , (vreme , temperature , humidity ,provera()))
  234.     conn.commit()
  235.     lastGraf = drawChart()
  236.     kontrola()
  237.  
  238. def kontrola(): #pali i gasi signale po potrebi
  239.     # v1 unutra
  240.     # v2 napolje
  241.     x = provera()
  242.     if (x==1):
  243.         GPIO.output( pinGrejac, 0)
  244.         GPIO.output(pinVentil1 , 1)
  245.         GPIO.output(pinVentil2,0)
  246.     elif(x==2):
  247.         GPIO.output( pinGrejac, 1)
  248.         GPIO.output(pinVentil1 , 0)
  249.         GPIO.output(pinVentil2,1)
  250.     elif(x==3):
  251.         GPIO.output(pinVentil2,1)
  252.         GPIO.output(pinGrejac, 0)
  253.         GPIO.output(pinVentil1,0)
  254.     elif(x==4):
  255.         GPIO.output(pinVentil2,0)
  256.         GPIO.output(pinVentil1,0)
  257.         GPIO.output(pinGrejac, 1)
  258.     elif(x==5):
  259.         GPIO.output( pinGrejac, 0)
  260.         GPIO.output(pinVentil1 , 1)
  261.         GPIO.output(pinVentil2 , 1)
  262.     elif(x==6):
  263.         GPIO.output(pinGrejac,1)
  264.         GPIO.output(pinVentil1 , 0)
  265.         GPIO.output(pinVentil2 , 0)
  266.     elif(x==7):
  267.         GPIO.output(pinVentil1,1)
  268.         GPIO.output(pinVentil2,0)
  269.         GPIO.output(pinGrejac,0)
  270.     elif(x==8):
  271.         GPIO.output(pinGrejac,1)
  272.         GPIO.output(pinVentil1,0)
  273.         GPIO.output(pinVentil2,1)
  274.  
  275. def provera(): # da li su vrednosti kriticne ili su ok (return se upisuje u polje Kriticno u bazi)
  276.     #ako je 0 sve je ok
  277.     #ako je 1 temperature je prevelika
  278.     #ako je 2 temperatura je premala
  279.     #ako je 3 vlaznost je preveliaka
  280.     #ako je 4 vlaznost je premala
  281.     #ako je 5 obe su prevelike
  282.     #ako je 6 obe su premale
  283.     # ako je 7 temp veliko humn malo
  284.     #ako 8 temp malo hum veliko
  285.     global temperature
  286.     global humidity
  287.     global maxHum
  288.     global minHum
  289.     global maxTemp
  290.     global minTemp
  291.     if (temperature >maxTemp):
  292.         if(humidity>maxHum): return 5
  293.         elif(humidity<minHum): return 7
  294.         else: return 1
  295.     elif (temperature<minTemp):
  296.         if(humidity>maxHum): return 8
  297.         elif(humidity<minHum): return 6
  298.         else: return 2
  299.     else:
  300.         if(humidity>maxHum): return 3
  301.         elif(humidity<minHum): return 4
  302.         else: return 0
  303.  
  304. def ugasiInkubator(): #gasi pinove pri kraju programa
  305.     GPIO.output(pinVentil1, 0)
  306.     GPIO.output(pinVentil2, 0)
  307.     GPIO.output(pinGrejac,0)
  308.  
  309. if __name__ == '__main__':
  310.         atexit.register(ugasiInkubator)
  311.         GPIO.setmode(GPIO.BCM)
  312.         GPIO.setwarnings(False)
  313.         GPIO.setup( pinVentil1 , GPIO.OUT)
  314.         GPIO.setup( pinVentil2 , GPIO.OUT)
  315.         GPIO.setup(pinGrejac , GPIO.OUT)
  316.         GPIO.output(pinVentil1,0)
  317.         GPIO.output(pinVentil2 , 0)
  318.         GPIO.output(pinGrejac,0)
  319.         allMinTemp=[]
  320.         allMaxTemp=[]
  321.         allMinHum=[]
  322.         allMaxHum=[]
  323.         for i in range(0,brUpita):
  324.             allMinTemp.append(minTemp)
  325.             allMaxTemp.append(maxTemp)
  326.             allMinHum.append(minHum)
  327.             allMaxHum.append(maxHum)
  328.         #vreme = strftime("%Y-%m-%d %H:%M:%S", gmtime()) #uzima sistemsko vreme
  329.         vreme = str(datetime.now())
  330.         f=open("user_id.txt" , "w")
  331.         f.close()
  332.         conn = sqlite3.connect(put , check_same_thread=False)
  333.         curs = conn.cursor()
  334.         humidity, temperature  = Adafruit_DHT.read_retry(11, pinScan)
  335.         curs.execute('insert into Vrednosti values (?,?,?,?)' , (vreme , temperature , humidity ,provera()))
  336.         conn.commit()
  337.         lastGraf=drawChart()
  338.         print str(vreme) + " Prva provera vlaznosti: " + str(humidity)+ " i temperature: " + str(temperature)
  339.         #promeniVrednosti()
  340.         zakazivac = BackgroundScheduler()
  341.         zakazivac.start()
  342.         zakazivac.add_job(func=izmeri , trigger=IntervalTrigger(seconds=interval))
  343.         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