Guest User

Untitled

a guest
Jun 20th, 2018
240
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 41.63 KB | None | 0 0
  1. '''imports para interface e uso geral'''
  2. from tkinter import *
  3. import time
  4. '''imports para email'''
  5. import smtplib
  6. from email.mime.text import MIMEText
  7. from email.mime.multipart import MIMEMultipart
  8. from email.mime.base import MIMEBase
  9. from email import encoders
  10. import threading
  11. '''imports para sensores'''
  12. import Adafruit_DHT
  13. import RPi.GPIO as GPIO
  14. import os
  15. import glob
  16.  
  17.  
  18. def Main():
  19.  
  20.  
  21. global root
  22.  
  23. root = Tk()
  24. root.title("Saturn-Garden Administration System")
  25. root.geometry("1280x720")
  26. root.configure(background="white")
  27.  
  28.  
  29. criar_arquivos()
  30.  
  31. h=time.localtime().tm_hour
  32. #h=18
  33. try:
  34. if 6<=h<18:
  35. fundo_foto= PhotoImage(file="fundo1.png")
  36. else:
  37. fundo_foto= PhotoImage(file="fundo2.png")
  38.  
  39. Label(root,image=fundo_foto).place(x=-1,y=-1)
  40. except:
  41. pass
  42.  
  43.  
  44. iniciar= Button(root, text="Iniciar",width=16,height=3,fg="white",bg="#075385",font="arial 16",command=inicia)
  45. iniciar.place(x=240,y=0)
  46.  
  47. dados= Button(root, text="Dados",width=16,height=3,fg="white",bg="#40ac23",font="arial 16",command=Novo)
  48. # Novo.bind("<Button-1>", hello)
  49. dados.place(x=440,y=0)
  50.  
  51. Nplanta= Button(root, text="Controle planta",width=16,height=3,fg="white",font="arial 16",bg="#40ac23",command=Plantas)
  52. Nplanta.bind("<Button-1>", Plantas)
  53. Nplanta.place(x=640,y=0)
  54.  
  55. Sair= Button(root, text="Sair",width=16,height=3,fg="white",bg="#c11500",font="arial 16",command=saida)
  56. Sair.place(x=840,y=0)
  57.  
  58. root.mainloop()
  59.  
  60.  
  61.  
  62. def criar_arquivos():
  63.  
  64. '''formato:
  65.  
  66. a funçao percorre o asquivo até achar \n e coloca os dados uma antes
  67. codigo
  68. Horário
  69. Temperatura(Ar)
  70. Umidade(Ar)
  71. Temperatura(Solo)
  72. umidade(Solo)
  73. Chuva
  74. Luz
  75.  
  76. dia define se alem do horario eu tenho que por o dia, para a temp semanal
  77.  
  78. '''
  79. '''cria o arquivo de dados'''
  80. try:
  81. arquivo=open("arquivo_de_dados.txt", "r")
  82. arquivo.close
  83. except:
  84. arquivo=open("arquivo_de_dados.txt", "w")
  85. arquivo.close
  86. '''cria o arquivo de presets'''
  87. try:
  88. arquivo=open('arquivo_plantas.txt', "r")
  89. arquivo.close
  90. except:
  91. arquivo=open('arquivo_plantas.txt', "w")
  92. arquivo.write("0\n")
  93. arquivo.write("Default\n")
  94. arquivo.write("30\n")
  95. arquivo.write("15\n")
  96. arquivo.write("100\n")
  97. arquivo.write("35\n")
  98. arquivo.write("40\n")
  99. arquivo.write("10\n")
  100. arquivo.write("40\n")
  101. arquivo.write("8\n")
  102. arquivo.close
  103. '''cria o arquivo o temporario do dia'''
  104. try:
  105. arquivo=open('arquivo_temp_dia.txt', "r")
  106. arquivo.close
  107. except:
  108. arquivo=open('arquivo_temp_dia.txt', "w")
  109. arquivo.write("Horário \n")
  110. arquivo.write("Temperatura(Ar) \n")
  111. arquivo.write("Umidade(Ar) \n")
  112. arquivo.write("Temperatura(Solo) \n")
  113. arquivo.write("Umidade(Solo) \n")
  114. arquivo.write("Chuva \n")
  115. arquivo.write("Luz \n")
  116. arquivo.close
  117. '''cria o arquivo o temporario da semana'''
  118.  
  119. try:
  120. arquivo=open('arquivo_temp_semana.txt', "r")
  121. arquivo.close
  122. except:
  123. arquivo=open('arquivo_temp_semana.txt', "w")
  124. arquivo.write("Horário \n")
  125. arquivo.write("Temperatura(Ar) \n")
  126. arquivo.write("Umidade(Ar) \n")
  127. arquivo.write("Temperatura(Solo) \n")
  128. arquivo.write("Umidade(Solo) \n")
  129. arquivo.write("Chuva \n")
  130. arquivo.write("Luz \n")
  131. arquivo.close
  132. try:
  133. arquivo=open("Dados_de_funcionamento.txt", "r")
  134. arquivo.close
  135. except:
  136. arquivo=open("Dados_de_funcionamento.txt", "w")
  137. arquivo.write("0")
  138. arquivo.close
  139.  
  140.  
  141.  
  142.  
  143.  
  144. def Novo():
  145.  
  146. '''arquivo dados
  147.  
  148.  
  149.  
  150. '''
  151.  
  152. global janelaNovo
  153.  
  154.  
  155. with open('arquivo_de_dados.txt', 'r') as arquivo:
  156. dados=arquivo.readlines()
  157. print(dados)
  158.  
  159. janelaNovo = Tk()
  160. janelaNovo.title("Dados do Usuario")
  161. janelaNovo.geometry("300x500")
  162. #janelaNovo.configure(background="white")
  163.  
  164. '''tudo com M são variaveis globais de memoria'''
  165.  
  166. global MEmail
  167. global Mhora
  168. global Mminutos
  169. global Listaplantas
  170. global Mdia_da_semana
  171.  
  172. #-----------------------------------------------Email------------------------------------
  173. Label(janelaNovo,text="Coloque seu Email:",fg="black",font="arial 12").place(x=0,y=0)
  174. MEmail=Entry(janelaNovo,width=30,font="none 12")
  175. if len(dados)>1:
  176. MEmail.insert(END,(dados[0].strip()))#o strip tira o \n e evita problemas
  177. MEmail.place(x=1,y=30)
  178.  
  179. #-----------------------------------------------hora do email------------------------------------
  180. Label(janelaNovo,text="Digite a hora do seu email diario:",fg="black",font="arial 12").place(x=0,y=60)
  181. Label(janelaNovo,text="Hora:",fg="black",font="arial 12").place(x=1,y=90)
  182. Label(janelaNovo,text="Minutos:",fg="black",font="arial 12").place(x=100,y=90)
  183. Mhora=Entry(janelaNovo,width=4,font="none 12")
  184. if len(dados)>1:
  185. Mhora.insert(END,(dados[1].strip()))
  186. Mhora.place(x=50,y=90)
  187. Mminutos=Entry(janelaNovo,width=3,font="none 12")
  188. if len(dados)>1:
  189. Mminutos.insert(END,(dados[2].strip()))
  190. Mminutos.place(x=170,y=90)
  191. #-----------------------------------------------janela de dia da semana------------------------------------
  192.  
  193. Label(janelaNovo,text="Dia da semana",fg="black",font="arial 12").place(x=1,y=120)
  194. Mdia_da_semana=Scale(janelaNovo,orient=HORIZONTAL,label="0=Seg, 1=Ter, 2=Qua, 3=Qui, 4=Sex, 5=Sab, 6=Dom",activebackground="#40ac23",length=280,from_=0,to=6,tickinterval=1)
  195. Mdia_da_semana.place(x=1,y=150)
  196.  
  197. if len(dados)>3:
  198. Mdia_da_semana.set(int(dados[4].strip()))
  199.  
  200.  
  201.  
  202. #-----------------------------------------------janela de preset------------------------------------
  203. Label(janelaNovo,text="Nome do preset da planta",fg="black",font="arial 12").place(x=0,y=230)
  204.  
  205. with open('arquivo_plantas.txt', 'r') as arquivo:
  206. dadosplanta=arquivo.readlines()
  207.  
  208. i=0
  209. index_planta=-1 #caso a planta chega apagada não vai dar erro de procurar o index onde ele não existe mais, -1 nunca estará na lista
  210. Listaplantas=Listbox(janelaNovo)
  211.  
  212. while(i<len(dadosplanta)):
  213. Listaplantas.insert(i,dadosplanta[i+1])
  214. if len(dados)>1 and dadosplanta[i+1]==dados[3]:#acha o idex da planta para poder selecionar
  215. index_planta=i//10
  216. i+=10
  217. Listaplantas.place(x=1,y=260)
  218. if len(dados)>1 and index_planta!=-1:
  219. Listaplantas.select_set(index_planta)
  220.  
  221. #-----------------------------------------------salvar------------------------------------
  222. Button(janelaNovo,text="Salvar Tudo",bg="#40ac23",fg="white",command=dadosgerais).place(x=0,y=460)
  223.  
  224.  
  225.  
  226. janelaNovo.mainloop()
  227.  
  228. def dadosgerais():
  229.  
  230. '''formato
  231.  
  232. email
  233. hora
  234. minuto
  235. nome do preset
  236. dia do email semanal
  237.  
  238.  
  239. '''
  240.  
  241.  
  242. '''testa os dados mandados, vê se só há numero'''
  243. global janelaErro
  244.  
  245.  
  246. try:
  247. hora=(int((Mhora.get()).strip()))
  248. minuto=(int((Mminutos.get()).strip()))
  249.  
  250. except:
  251.  
  252. janelaErro = Tk()
  253. janelaErro.title("Erro")
  254. janelaErro.configure(background="white")
  255.  
  256. Label(janelaErro,text='há simbolos estranhos em horario ',fg="black",font="arial 12").pack()
  257. Button(janelaErro,text="Ok",bg="#40ac23",fg="white",command=fecha_erro_1).pack()
  258.  
  259. return()
  260.  
  261. if (0<=hora<24 and 0<=minuto<60):
  262.  
  263. '''----------salva os dados-----------'''
  264. arquivo=open("arquivo_de_dados.txt", "w")
  265.  
  266.  
  267. arquivo.write(MEmail.get())
  268. arquivo.write("\n")
  269. arquivo.write(Mhora.get())
  270. arquivo.write("\n")
  271. arquivo.write(Mminutos.get())
  272. arquivo.write("\n")
  273. arquivo.write(Listaplantas.get(Listaplantas.curselection()))
  274. arquivo.write(str(Mdia_da_semana.get()))#não precisa por o \n oirque já esta no lista
  275.  
  276.  
  277. arquivo.close()
  278.  
  279. print("dados salvos")
  280.  
  281. janelaNovo.destroy()
  282.  
  283. else:
  284. '''----------------avisa se houve erro----------------------'''
  285. janelaErro = Tk()
  286. janelaErro.title("Erro")
  287. janelaErro.configure(background="white")
  288.  
  289. Label(janelaErro,text="Erro confira seus dados\n horas devem sem entre 0 e 23 e minutos entre 0 e 59",fg="black",font="arial 12").pack()
  290. Button(janelaErro,text="Ok",bg="#40ac23",fg="white",command=fecha_erro_1).pack()
  291.  
  292. def fecha_erro_1():
  293.  
  294. janelaErro.destroy()
  295.  
  296.  
  297. def Plantas(event):
  298.  
  299. global janelaPlantas
  300. global Listaplantas
  301.  
  302. janelaPlantas = Tk()
  303. janelaPlantas.title("Dados da planta")
  304. janelaPlantas.configure(background="white")
  305.  
  306. topFrame=Frame(janelaPlantas)
  307. topFrame.pack()
  308. bottomFrame=Frame(janelaPlantas)
  309. bottomFrame.pack(side=BOTTOM)
  310.  
  311. with open('arquivo_plantas.txt', 'r') as arquivo:
  312. dados=arquivo.readlines()
  313. i=0
  314.  
  315. Listaplantas=Listbox(topFrame)
  316. if(len(dados)>1):
  317. while(i<len(dados)):
  318. Listaplantas.insert(i,dados[i+1])
  319. i+=10
  320.  
  321. Listaplantas.pack()
  322.  
  323. if (len(dados)>1):
  324. Editar= Button(bottomFrame, text="Editar",fg="white",bg="#40ac23",command=edita)
  325. Editar.pack(side=LEFT)
  326.  
  327. Adicionar= Button(bottomFrame, text="Adicionar nova",fg="white",bg="#c11500",command=NovasPlantas)
  328. Adicionar.pack(side=LEFT)
  329.  
  330. def edita():
  331.  
  332. global Minicio
  333. with open('arquivo_plantas.txt', 'r') as arquivo:
  334. dados=arquivo.readlines()
  335.  
  336. planta=Listaplantas.get(Listaplantas.curselection())
  337.  
  338.  
  339. for i in range(len(dados)):
  340. if dados[i]==planta:
  341. Minicio=i
  342.  
  343. global janelaEditaPlantas
  344. global MTemparMAX
  345. global MTemparMIN
  346. global MHumidarMAX
  347. global MHumidarMIN
  348. global MTempsoloMAX
  349. global MTempsoloMIN
  350. global MHumidsoloMIN
  351. global MTempofoto
  352. global MNomeplanta
  353.  
  354.  
  355. janelaEditaPlantas = Tk()
  356. janelaEditaPlantas.title("Dados da planta")
  357. janelaEditaPlantas.geometry("325x450")
  358. #janelaEditaPlantas.configure(background="white")
  359.  
  360.  
  361. Label(janelaEditaPlantas,text="Temperatura do ar:",fg="black",font="arial 12").place(x=10,y=10)
  362. Label(janelaEditaPlantas,text="Max:",fg="black",font="arial 12").place(x=10,y=40)
  363. Label(janelaEditaPlantas,text="Min",fg="black",font="arial 12").place(x=100,y=40)
  364. MTemparMAX=Entry(janelaEditaPlantas,width=4,font="none 12")
  365. MTemparMAX.insert(END,str(dados[Minicio+1]).strip())
  366. MTemparMAX.place(x=50,y=40)
  367. MTemparMIN=Entry(janelaEditaPlantas,width=3,font="none 12")
  368. MTemparMIN.insert(END,dados[Minicio+2].strip())
  369. MTemparMIN.place(x=140,y=40)
  370.  
  371. Label(janelaEditaPlantas,text="Umidade do ar:",fg="black",font="arial 12").place(x=10,y=70)
  372. Label(janelaEditaPlantas,text="Max:",fg="black",font="arial 12").place(x=10,y=100)
  373. Label(janelaEditaPlantas,text="Min:",fg="black",font="arial 12").place(x=100,y=100)
  374. MHumidarMAX=Entry(janelaEditaPlantas,width=4,font="none 12")
  375. MHumidarMAX.insert(END,dados[Minicio+3].strip())
  376. MHumidarMAX.place(x=50,y=100)
  377. MHumidarMIN=Entry(janelaEditaPlantas,width=3,font="none 12")
  378. MHumidarMIN.insert(END,dados[Minicio+4].strip())
  379. MHumidarMIN.place(x=140,y=100)
  380.  
  381. Label(janelaEditaPlantas,text="Temperatura do solo:",fg="black",font="arial 12").place(x=10,y=130)
  382. Label(janelaEditaPlantas,text="Max:",fg="black",font="arial 12").place(x=10,y=160)
  383. Label(janelaEditaPlantas,text="Min:",fg="black",font="arial 12").place(x=100,y=160)
  384. MTempsoloMAX=Entry(janelaEditaPlantas,width=4,font="none 12")
  385. MTempsoloMAX.insert(END,dados[Minicio+5].strip())
  386. MTempsoloMAX.place(x=50,y=160)
  387. MTempsoloMIN=Entry(janelaEditaPlantas,width=3,font="none 12")
  388. MTempsoloMIN.insert(END,dados[Minicio+6].strip())
  389. MTempsoloMIN.place(x=140,y=160)
  390.  
  391. Label(janelaEditaPlantas,text="Umidade minima do solo:",fg="black",font="arial 12").place(x=10,y=190)
  392. Label(janelaEditaPlantas,text="Min:",fg="black",font="arial 12").place(x=10,y=220)
  393. MHumidsoloMIN=Entry(janelaEditaPlantas,width=4,font="none 12")
  394. MHumidsoloMIN.insert(END,dados[Minicio+7].strip())
  395. MHumidsoloMIN.place(x=50,y=220)
  396.  
  397. Label(janelaEditaPlantas,text="Tempo exposto á luz:",fg="black",font="arial 12").place(x=10,y=250)
  398. MTempofoto=Scale(janelaEditaPlantas,orient=HORIZONTAL,activebackground="#40ac23",length=300,from_=0,to=24,tickinterval=4)
  399. MTempofoto.set(int(dados[Minicio+8]))
  400. MTempofoto.place(x=10,y=270)
  401.  
  402.  
  403. Label(janelaEditaPlantas,text="Nome do preset",fg="black",font="arial 12").place(x=10,y=340)
  404. MNomeplanta=Entry(janelaEditaPlantas,width=30,font="none 12")
  405. MNomeplanta.insert(END,dados[Minicio].strip())
  406. MNomeplanta.place(x=10,y=370)
  407. Button(janelaEditaPlantas,text="Salvar Tudo",bg="#40ac23",fg="white",command=editarpreset).place(x=10,y=400)
  408. print(dados[Minicio-1])
  409. if (dados[Minicio-1]!='0\n'):
  410. Button(janelaEditaPlantas,text="Excluir",bg="#c11500",fg="white",command=exclui_pergunta).place(x=270,y=400)
  411.  
  412. janelaEditaPlantas.mainloop()
  413.  
  414. def editarpreset():
  415.  
  416. '''----------testa as variavais, se não tem letra ou simbolos------------'''
  417.  
  418. global janelaErro
  419. try:
  420.  
  421. TemparMAX=(int((MTemparMAX.get()).strip()))
  422. TemparMIN=(int((MTemparMIN.get()).strip()))
  423. HumidarMAX=(int((MHumidarMAX.get()).strip()))
  424. HumidarMIN=(int((MHumidarMIN.get()).strip()))
  425. TempsoloMAX=(int((MTempsoloMAX.get()).strip()))
  426. TempsoloMIN=(int((MTempsoloMIN.get()).strip()))
  427. HumidsoloMIN=(int((MHumidsoloMIN.get()).strip()))
  428.  
  429. except:
  430.  
  431. janelaErro = Tk()
  432. janelaErro.title("Erro")
  433. janelaErro.configure(background="white")
  434.  
  435. Label(janelaErro,text='Há simbolos estranhos em alguma das variáveis',bg="white",fg="black",font="arial 12").pack()
  436. Button(janelaErro,text="Ok",bg="#40ac23",fg="white",command=fecha_erro_1).pack()
  437.  
  438. return()
  439.  
  440. if(TemparMAX>=TemparMIN and HumidarMAX>=HumidarMIN and TempsoloMAX>=TempsoloMIN and HumidsoloMIN>=0 ):
  441. with open('arquivo_plantas.txt', 'r') as arquivo:
  442. dados=arquivo.readlines()
  443. dados[Minicio]=str((MNomeplanta.get()).strip()+"\n")
  444. dados[Minicio+1]=str((MTemparMAX.get()).strip()+"\n")
  445. dados[Minicio+2]=str((MTemparMIN.get()).strip()+"\n")
  446. dados[Minicio+3]=str((MHumidarMIN.get()).strip()+"\n")
  447. dados[Minicio+4]=str((MHumidarMIN.get()).strip()+"\n")
  448. dados[Minicio+5]=str((MTempsoloMAX.get()).strip()+"\n")
  449. dados[Minicio+6]=str((MTempsoloMIN.get()).strip()+"\n")
  450. dados[Minicio+7]=str((MHumidsoloMIN.get()).strip()+"\n")
  451. dados[Minicio+8]=(str(MTempofoto.get())+"\n")
  452. with open('arquivo_plantas.txt', 'w') as arquivo:
  453. arquivo.writelines( dados )
  454.  
  455. janelaEditaPlantas.destroy()
  456. janelaPlantas.destroy()
  457. Plantas(1)
  458. else:
  459. janelaErro = Tk()
  460. janelaErro.title("Erro")
  461. janelaErro.configure(background="white")
  462.  
  463. Label(janelaErro,text='Confira seus máximos e mínimos',bg="white",fg="black",font="arial 12").pack()
  464. Button(janelaErro,text="Ok",bg="#40ac23",fg="white",command=fecha_erro_1).pack()
  465.  
  466. return()
  467. def exclui_pergunta():
  468.  
  469. global janelaexcluipergunta
  470.  
  471. janelaexcluipergunta = Tk()
  472. janelaexcluipergunta.title("excluir")
  473. janelaexcluipergunta.configure(background="white")
  474.  
  475. Label(janelaexcluipergunta,text="Tem certeza que deseja excluir ?",bg="white",fg="black",font="arial 12").grid (row=0,column=0)
  476. Button(janelaexcluipergunta,text="Excluir",bg="#c11500",fg="white",command=exclui).grid (row=1,column=0)
  477. Button(janelaexcluipergunta,text="Cancelar",bg="#40ac23",fg="white",command=fechaexclui).grid (row=1,column=1)
  478.  
  479. def fechaexclui ():
  480.  
  481. janelaexcluipergunta.destroy()
  482.  
  483. def exclui():
  484.  
  485. janelaexcluipergunta.destroy()
  486.  
  487. with open('arquivo_plantas.txt', 'r') as arquivo:
  488. dados=arquivo.readlines()
  489. f=Minicio-1
  490. novosdados=[]
  491.  
  492. i=0
  493. while i<(len(dados)):
  494. if (i==f):
  495. i+=10
  496. else:
  497. novosdados.append(dados[i])
  498. i+=1
  499.  
  500. with open('arquivo_plantas.txt', 'w') as arquivo:
  501. arquivo.writelines( novosdados )
  502.  
  503. janelaEditaPlantas.destroy()
  504. janelaPlantas.destroy()
  505. Plantas(1)
  506.  
  507. def NovasPlantas():
  508.  
  509. """formato:
  510. numero da planta
  511. nome
  512. TemparMAX
  513. TemparMIN
  514. MHumidarMAX
  515. MHumidarMIN
  516. MTempsoloMAX
  517. MTempsoloMIN
  518. MHumidsoloMIN
  519. MTempofoto
  520. """
  521.  
  522.  
  523. global janelaNovasPlantas
  524. global MTemparMAX
  525. global MTemparMIN
  526. global MHumidarMAX
  527. global MHumidarMIN
  528. global MTempsoloMAX
  529. global MTempsoloMIN
  530. global MHumidsoloMIN
  531. global MTempofoto
  532. global MNomeplanta
  533.  
  534.  
  535. janelaNovasPlantas = Tk()
  536. janelaNovasPlantas.title("Dados da planta")
  537. #janelaNovasPlantas.configure(background="white")
  538. janelaNovasPlantas.geometry("325x450")
  539.  
  540.  
  541. Label(janelaNovasPlantas,text="Temperatura do ar:",fg="black",font="arial 12").place(x=10,y=10)
  542. Label(janelaNovasPlantas,text="Max:",fg="black",font="arial 12").place(x=10,y=40)
  543. Label(janelaNovasPlantas,text="Min",fg="black",font="arial 12").place(x=100,y=40)
  544. MTemparMAX=Entry(janelaNovasPlantas,width=4,font="none 12")
  545. MTemparMAX.place(x=50,y=40)
  546. MTemparMIN=Entry(janelaNovasPlantas,width=3,font="none 12")
  547. MTemparMIN.place(x=140,y=40)
  548.  
  549. Label(janelaNovasPlantas,text="Umidade do ar:",fg="black",font="arial 12").place(x=10,y=70)
  550. Label(janelaNovasPlantas,text="Max:",fg="black",font="arial 12").place(x=10,y=100)
  551. Label(janelaNovasPlantas,text="Min:",fg="black",font="arial 12").place(x=100,y=100)
  552. MHumidarMAX=Entry(janelaNovasPlantas,width=4,font="none 12")
  553. MHumidarMAX.place(x=50,y=100)
  554. MHumidarMIN=Entry(janelaNovasPlantas,width=3,font="none 12")
  555. MHumidarMIN.place(x=140,y=100)
  556.  
  557. Label(janelaNovasPlantas,text="Temperatura do solo:",fg="black",font="arial 12").place(x=10,y=130)
  558. Label(janelaNovasPlantas,text="Max:",fg="black",font="arial 12").place(x=10,y=160)
  559. Label(janelaNovasPlantas,text="Min:",fg="black",font="arial 12").place(x=100,y=160)
  560. MTempsoloMAX=Entry(janelaNovasPlantas,width=4,font="none 12")
  561. MTempsoloMAX.place(x=50,y=160)
  562. MTempsoloMIN=Entry(janelaNovasPlantas,width=3,font="none 12")
  563. MTempsoloMIN.place(x=140,y=160)
  564.  
  565. Label(janelaNovasPlantas,text="Umidade minima do solo:",fg="black",font="arial 12").place(x=10,y=190)
  566. Label(janelaNovasPlantas,text="Min:",fg="black",font="arial 12").place(x=10,y=220)
  567. MHumidsoloMIN=Entry(janelaNovasPlantas,width=4,font="none 12")
  568. MHumidsoloMIN.place(x=50,y=220)
  569.  
  570. Label(janelaNovasPlantas,text="Tempo exposto á luz:",fg="black",font="arial 12").place(x=10,y=250)
  571. MTempofoto=Scale(janelaNovasPlantas,orient=HORIZONTAL,activebackground="#40ac23",length=300,from_=0,to=24,tickinterval=4)
  572. MTempofoto.place(x=10,y=270)
  573.  
  574.  
  575. Label(janelaNovasPlantas,text="Nome do preset",fg="black",font="arial 12").place(x=10,y=340)
  576. MNomeplanta=Entry(janelaNovasPlantas,width=30,font="none 12")
  577. MNomeplanta.place(x=10,y=370)
  578. Button(janelaNovasPlantas,text="Salvar Tudo",bg="#40ac23",fg="white",command=adicionarpreset).place(x=10,y=400)
  579.  
  580. janelaNovasPlantas.mainloop()
  581.  
  582.  
  583.  
  584. def adicionarpreset():
  585.  
  586. '''valores no txt:
  587. 0 - numero da planta(a primeira é 0)
  588. 1 - MNomeplanta
  589. 2 - TemparMAX
  590. 3 - TemparMIN
  591. 4 - MHumidarMAX
  592. 5 - MHumidarMIN
  593. 6 - MTempsoloMAX
  594. 7 - MTempsoloMIN
  595. 8 - MHumidsoloMIN
  596. 9 - MTempofoto
  597.  
  598. '''
  599. try:
  600.  
  601. TemparMAX=(int((MTemparMAX.get()).strip()))
  602. TemparMIN=(int((MTemparMIN.get()).strip()))
  603. HumidarMAX=(int((MHumidarMAX.get()).strip()))
  604. HumidarMIN=(int((MHumidarMIN.get()).strip()))
  605. TempsoloMAX=(int((MTempsoloMAX.get()).strip()))
  606. TempsoloMIN=(int((MTempsoloMIN.get()).strip()))
  607. HumidsoloMIN=(int((MHumidsoloMIN.get()).strip()))
  608.  
  609. except:
  610.  
  611. janelaErro = Tk()
  612. janelaErro.title("Erro")
  613. janelaErro.configure(background="white")
  614.  
  615. Label(janelaErro,text='Há simbolos estranhos em alguma das variáveis',bg="white",fg="black",font="arial 12").pack()
  616. Button(janelaErro,text="Ok",bg="#40ac23",fg="white",command=fecha_erro_1).pack()
  617.  
  618. return()
  619.  
  620. if(TemparMAX>=TemparMIN and HumidarMAX>=HumidarMIN and TempsoloMAX>=TempsoloMIN and HumidsoloMIN>=0 ):
  621.  
  622. with open('arquivo_plantas.txt', 'r') as arquivo:
  623. dados=arquivo.readlines()
  624. dados.append(str(len(dados)//10))
  625. dados.append('\n')
  626. dados.append(str(MNomeplanta.get()).strip())
  627. dados.append('\n')
  628. dados.append(str(MTemparMAX.get()).strip())
  629. dados.append('\n')
  630. dados.append(str(MTemparMIN.get()).strip())
  631. dados.append('\n')
  632. dados.append(str(MHumidarMAX.get()).strip())
  633. dados.append('\n')
  634. dados.append(str(MHumidarMIN.get()).strip())
  635. dados.append('\n')
  636. dados.append(str(MTempsoloMAX.get()).strip())
  637. dados.append('\n')
  638. dados.append(str(MTempsoloMIN.get()).strip())
  639. dados.append('\n')
  640. dados.append(str(MHumidsoloMIN.get()).strip())
  641. dados.append('\n')
  642. dados.append(str(MTempofoto.get()))
  643. dados.append('\n')
  644. print(dados)
  645.  
  646. with open('arquivo_plantas.txt', 'w') as arquivo:
  647. arquivo.writelines( dados )
  648.  
  649. else:
  650. janelaErro = Tk()
  651. janelaErro.title("Erro")
  652. janelaErro.configure(background="white")
  653.  
  654. Label(janelaErro,text='Confira seus máximos e mínimos',bg="white",fg="black",font="arial 12").pack()
  655. Button(janelaErro,text="Ok",bg="#40ac23",fg="white",command=fecha_erro_1).pack()
  656.  
  657. return()
  658. '''
  659. print(MNomeplanta.get())
  660. print(MTemparMAX.get())
  661. print(MTemparMIN.get())
  662. print(MHumidarMAX.get())
  663. print(MHumidarMIN.get())
  664. print(MTempsoloMAX.get())
  665. print(MTempsoloMIN.get())
  666. print(MHumidsoloMIN.get())
  667. print(MTempofoto.get())
  668. '''
  669. janelaNovasPlantas.destroy()
  670. janelaPlantas.destroy()
  671. Plantas(1)
  672.  
  673. def saida():
  674.  
  675.  
  676. root.destroy()
  677.  
  678. try:
  679. janelaPlantas.destroy()
  680. except:
  681. pass
  682.  
  683. try:
  684. janelaNovo.destroy()
  685. except:
  686. pass
  687.  
  688. try:
  689. janelaEditaPlantas.destroy()
  690. except:
  691. pass
  692.  
  693. try:
  694. janelaNovasPlantas.destroy()
  695. except:
  696. pass
  697.  
  698. try:
  699. janelainicia.destroy()
  700. except:
  701. pass
  702.  
  703. try:
  704. janelaErro.destroy()
  705. except:
  706. pass
  707.  
  708. try:
  709. janelaexcluipergunta.destroy()
  710. except:
  711. pass
  712. try:
  713. janela_erro_inicia.destroy()
  714. except:
  715. pass
  716.  
  717. encerra()
  718. '''
  719. saida = Tk()
  720. saida .title("Saturn-Garden Adminitration Sistem")
  721. saida .configure(background="white")
  722.  
  723. Label(saida ,text="Desculpe, essa função na funciona ainda, você se importaria fechar pelo icone na janela ?\n =)",bg="white",font="arial 15").grid (row=0,column=0,sticky=W)
  724.  
  725. '''
  726.  
  727. def inicia():
  728.  
  729.  
  730. erro=False
  731. with open('arquivo_de_dados.txt', 'r') as arquivo:
  732. dados_gerais=arquivo.readlines()
  733.  
  734. with open('arquivo_plantas.txt', 'r') as arquivo:
  735. dadosplanta=arquivo.readlines()
  736.  
  737. if len(dados_gerais)<=1:
  738. erro_inicia(1)
  739. erro=True
  740.  
  741. planta=dados_gerais[3]
  742. index_planta=-1
  743.  
  744. i=0
  745. while(i<len(dadosplanta)):
  746. if dadosplanta[i+1]==dados_gerais[3]:#acha o idex da planta para poder selecionar
  747. index_planta=i//10
  748. i+=10
  749. if index_planta==-1:
  750. erro_inicia(2)
  751. erro=True
  752.  
  753. if erro==False:
  754. #escreve para o arquivo entrar em loop
  755. funcionamento=open("Dados_de_funcionamento.txt", "w")
  756. funcionamento.write("1")
  757. funcionamento.close
  758.  
  759. with open('Dados_de_funcionamento.txt', 'r') as funcionamento:
  760. dados_ligar=funcionamento.readlines()
  761.  
  762. t = threading.Thread(target=principaldados)
  763. t.start()
  764. janeladoinicia()
  765.  
  766.  
  767. '''
  768. dados_sesores=dados_da_hora()'Dados_de_funcionamento.txt
  769. temp(dados_sensores,'arquivo_temp_dia.txt')
  770. temp(dados_sensores,'arquivo_temp_semana.txt')
  771. '''
  772. def erro_inicia(tipo):
  773. global janela_erro_inicia
  774. janela_erro_inicia = Tk()
  775. janela_erro_inicia.title("Erro")
  776. janela_erro_inicia.configure(background="white")
  777.  
  778. if tipo==1:
  779. Label(janela_erro_inicia,text='Você precisa configurar seu email',bg="white",fg="black",font="arial 12").pack()
  780. Button(janela_erro_inicia,text="Ok",bg="#40ac23",fg="white",command=fecha_erro_3).pack()
  781. if tipo==2:
  782. Label(janela_erro_inicia,text='O Preset dessa planta foi deletado',bg="white",fg="black",font="arial 12").pack()
  783. Button(janela_erro_inicia,text="Ok",bg="#40ac23",fg="white",command=fecha_erro_3).pack()
  784.  
  785. return()
  786.  
  787. def fecha_erro_3():
  788.  
  789. janela_erro_inicia.destroy()
  790.  
  791. def janeladoinicia():
  792.  
  793. global janelainicia
  794.  
  795.  
  796.  
  797. janelainicia = Tk()
  798. janelainicia.title("Programa em andamento")
  799. janelainicia.configure(background="white")
  800.  
  801. now = time.strftime("%H:%M:%S")
  802. Label(janelainicia,text="Horário:",bg="#31b027",fg="black",font="arial 15").grid (row=0,column=0,sticky=W)
  803. Label(janelainicia,text=now,bg="#31b027",fg="black",font="Helvetica 30 bold").grid (row=1,column=0,sticky=W)
  804.  
  805. agora = time.localtime()
  806. tempo=str(59-agora.tm_min)+"min e "+str(60-agora.tm_sec)+"sec"
  807.  
  808. Label(janelainicia,text="Tempo para a próxima medição:",bg="white",fg="black",font="arial 15").grid (row=0,column=1,sticky=W)
  809. Label(janelainicia,text=tempo,bg="white",fg="black",font="Helvetica 30 bold").grid (row=1,column=1,sticky=W)
  810.  
  811. atualisar= Button(janelainicia, text="Atualizar",fg="white",bg="#40ac23",command=atualizartempo)
  812. atualisar.grid (row=2,column=0,sticky=W)
  813.  
  814. desligar= Button(janelainicia, text="desligar",fg="white",bg="#c11500",command=encerra)
  815. desligar.grid (row=3,column=0,sticky=W)
  816.  
  817.  
  818.  
  819. def atualizartempo():
  820.  
  821. janelainicia.destroy()
  822. janeladoinicia()
  823.  
  824. def encerra():
  825. arquivo=open("Dados_de_funcionamento.txt", "w")
  826. arquivo.write("0")
  827. arquivo.close
  828.  
  829. try:
  830. janelainicia.destroy()
  831. except:
  832. pass
  833.  
  834. def principaldados():
  835. '''Dados_de_funcionamento.txt
  836. armazena 2 informaçoes
  837. 1-se estava o programa esta ligado(1-sim\0-não)
  838. 2-em que dia da semana o programa esta
  839. '''
  840.  
  841. '''o 'e' é recebido da função a cada clico'''
  842.  
  843. with open('Dados_de_funcionamento.txt', 'r') as arquivo_ligar:
  844. dados_ligar=arquivo_ligar.readlines()
  845.  
  846. now = time.localtime()
  847. minuto=now.tm_min
  848. hora=now.tm_hour
  849. dia_semana=now.tm_wday
  850.  
  851. print(hora,minuto)
  852. dia=(str(now.tm_mday)+"/"+str(now.tm_mon)+"/"+str(now.tm_mday)+" ")
  853. if minuto==57:
  854. dados_sesores=dados_da_hora()
  855. temp(dados_sensores,'arquivo_temp_dia.txt')
  856. detecta_problemas(dados_sesores)#procura se tem problema depois de colocar na temp para poder enviar o arquivo
  857. dados_sensores[0]=dia+dados_sensores[0]#coloca o dia para a tabela semanal
  858. temp(dados_sensores,'arquivo_temp_semana.txt')
  859.  
  860. with open('arquivo_de_dados.txt', 'r') as arquivo_dados:
  861. dados=arquivo_dados.readlines()
  862.  
  863.  
  864. if hora==int(dados[1].strip("\n")) and minuto==int(dados[2].strip("\n")):
  865. criar_aquivo_diario()
  866. apaga_temp('arquivo_temp_dia.txt')
  867.  
  868.  
  869. if int(dia_semana)==(int(dados[4])):
  870. criar_aquivo_semanal()
  871. apaga_temp('arquivo_temp_semana.txt')
  872.  
  873.  
  874. if int(dados_ligar[0])==1:
  875. time.sleep(60)
  876. principaldados()
  877.  
  878. def apaga_temp(tipo):
  879. '''reinicia o arquivo temporario apos uma medição'''
  880.  
  881. arquivo=open(tipo, "w")
  882. arquivo.write("Horário \n")
  883. arquivo.write("Temperatura(Ar) \n")
  884. arquivo.write("Umidade(Ar) \n")
  885. arquivo.write("Temperatura(Solo) \n")
  886. arquivo.write("Umidade(Solo) \n")
  887. arquivo.write("Chuva \n")
  888. arquivo.write("Luz \n")
  889. arquivo.close
  890.  
  891. def mandar_email(destino,nome,corpo,arquivo):
  892. email_user = 'TesteequeipeSaturno@gmail.com'
  893. email_password = 'planeta7'
  894. email_send = destino
  895.  
  896. subject = nome
  897.  
  898. msg = MIMEMultipart()
  899. msg['From'] = email_user
  900. msg['To'] = email_send
  901. msg['Subject'] = subject
  902.  
  903. body = corpo
  904. msg.attach(MIMEText(body,'plain'))
  905.  
  906. filename=arquivo
  907. attachment =open(filename,'rb')
  908.  
  909. nome_do_anexo="attachment; filename= "+nome+".txt"
  910.  
  911. part = MIMEBase('application','octet-stream')
  912. part.set_payload((attachment).read())
  913. encoders.encode_base64(part)
  914. part.add_header('Content-Disposition',nome_do_anexo)
  915.  
  916. msg.attach(part)
  917. text = msg.as_string()
  918. server = smtplib.SMTP('smtp.gmail.com',587)
  919. server.starttls()
  920. server.login(email_user,email_password)
  921.  
  922.  
  923. server.sendmail(email_user,email_send,text)
  924. server.quit()
  925.  
  926. def detecta_problemas(dados_sesores):
  927. '''
  928. codigo da string
  929. 0-Horario
  930. 1-Temperatura(Ar)
  931. 2-Umidade(Ar)
  932. 3-Temperatura(Solo)
  933. 4-Umidade(Solo)
  934. 5-Chuva
  935. 6-Luz
  936.  
  937. codigo do arquivo das plantas
  938. inicio-1 - numeroplanta
  939. inicio - Nomeplanta
  940. inicio + 1 - TemparMAX
  941. inicio + 2 - TemparMIN
  942. inicio + 3 - HumidarMAX
  943. inicio + 4 - HumidarMIN
  944. inicio + 5 - TempsoloMAX
  945. inicio + 6 - TempsoloMIN
  946. inicio + 7 - HumidsoloMIN
  947. inicio + 8 - Tempofoto
  948.  
  949. codigo do arquivo geral:
  950. 0-email
  951. 1-hora de envio
  952. 2-minutos do envio
  953. 3-nome do preset
  954.  
  955.  
  956. '''
  957. with open('arquivo_de_dados.txt', 'r') as arquivo_dados:
  958. dados_gerais=arquivo_dados.readlines()
  959.  
  960. with open('arquivo_plantas.txt', 'r') as arquivo_das_platas:
  961. dados_plantas=arquivo_das_platas.readlines()
  962.  
  963.  
  964. planta=dados_gerais[3]
  965.  
  966. for i in range(len(dados_plantas)):
  967. if dados_plantas[i]==planta:
  968. inicio=i
  969.  
  970. problem=False
  971. lista_problemas=[]
  972.  
  973. delta_temp=int(dados_sesores[1])-int(dados_plantas[inicio+1].strip())
  974. if delta_temp>0:
  975. problem=True
  976. problema="temperatura do ar " + str(delta_temp)+" Cº acima do normal"
  977. lista_problemas.append(problema)
  978.  
  979.  
  980. delta_temp=int(dados_plantas[inicio+2].strip())-int(dados_sesores[1])
  981. if delta_temp>0:
  982. problem=True
  983. problema="temperatura do ar " + str(delta_temp)+" Cº abaixo do normal"
  984. lista_problemas.append(problema)
  985.  
  986. delta_humd= int(dados_sesores[2])-int(dados_plantas[inicio+3].strip())
  987. if delta_humd>0:
  988. problem=True
  989. problema="umidade do ar " + str(delta_humd)+"% acima do normal"
  990. lista_problemas.append(problema)
  991. delta_humd=int(dados_plantas[inicio+4].strip())-int(dados_sesores[2])
  992. if delta_humd>0:
  993. problem=True
  994. problema="umidade do ar " + str(delta_humd)+"% abaixo do normal"
  995. lista_problemas.append(problema)
  996.  
  997. delta_temp=int(dados_sesores[3])-int(dados_plantas[inicio+5].strip())
  998. if delta_temp>0:
  999. problem=True
  1000. problema="temperatura do solo " + str(delta_temp)+" Cº acima do normal"
  1001. lista_problemas.append(problema)
  1002. delta_temp=int(dados_plantas[inicio+6].strip())-int(dados_sesores[3])
  1003. if delta_temp>0:
  1004. problem=True
  1005. problema="temperatura so solo " + str(delta_temp)+" Cº abaixo do normal"
  1006. lista_problemas.append(problema)
  1007.  
  1008. if int(dados_sesores[4])==0:
  1009. problem=True
  1010. problema="o solo esta seco"
  1011. lista_problemas.append(problema)
  1012.  
  1013.  
  1014. if problem:
  1015. destino=destino=dados_gerais[0]
  1016. now = time.localtime()
  1017. nome= "Equipe Saturno: Aviso de ocorrencia " + time.strftime("%H:%M")
  1018. corpo="destectamos os seguintes problemas na sua plantação:\n"
  1019. i=1
  1020. for p in lista_problemas:
  1021. corpo=corpo+str(i)+'-'+p+'\n'
  1022. i=i+1
  1023. arquivo_de_envio='arquivo_temp_dia.txt'
  1024. mandar_email(destino,nome,corpo,arquivo_de_envio)
  1025.  
  1026.  
  1027.  
  1028.  
  1029.  
  1030.  
  1031.  
  1032. def temp(dados_sensores,tipo):
  1033.  
  1034. '''a funçao percorre o asquivo até achar \n e coloca os dados uma antes
  1035. codigo
  1036. Horario
  1037. Temperatura(Ar)
  1038. Umidade(Ar)
  1039. Temperatura(Solo)
  1040. umidade(Solo)
  1041. Chuva
  1042. Luz
  1043.  
  1044. dia define se alem do horario eu tenho que por o dia, para a temp semanal
  1045.  
  1046. '''
  1047.  
  1048. e=0
  1049. with open(tipo, 'r') as arquivo:
  1050. dados=arquivo.readlines()
  1051. for i in range(len(dados)):
  1052. linha=dados[i].strip("\n")
  1053. linha=linha+str(dados_sensores[e])+" \n"
  1054. dados[i]=linha
  1055. e+=1
  1056. print(dados)
  1057. with open(tipo, 'w') as arquivo:
  1058. arquivo.writelines( dados )
  1059.  
  1060. def criar_aquivo_diario():
  1061.  
  1062. global arquivo_dia
  1063.  
  1064. now = time.localtime()
  1065. arquivo_dia= "Relatorio diario de " + str(now.tm_mday) + '-' + str(now.tm_mon) + '-' + str(now.tm_year) +' às ' + str(now.tm_hour) + ' e ' + str(now.tm_min) +'.txt'
  1066. now = time.localtime()
  1067.  
  1068. with open('arquivo_temp_dia.txt', 'r') as arquivo:
  1069. dados=arquivo.readlines()
  1070.  
  1071. tabela_saida=open(arquivo_dia, "w")
  1072.  
  1073.  
  1074. tabela_saida.write("Dados diarios de ")
  1075. tabela_saida.write(str(now.tm_mday))
  1076. tabela_saida.write("/")
  1077. tabela_saida.write(str(now.tm_mon))
  1078. tabela_saida.write("/")
  1079. tabela_saida.write(str(now.tm_year))
  1080. tabela_saida.write(" ás ")
  1081. tabela_saida.write(str(now.tm_hour))
  1082. tabela_saida.write(":")
  1083. tabela_saida.write(str(now.tm_min))
  1084. tabela_saida.write("\n")
  1085. tabela_saida.write("\n")
  1086.  
  1087. tabela_saida.writelines( dados )
  1088. #não precisa imprimir o /n por que o arquivo já faz isso.
  1089.  
  1090. ''' a proxima parte acha o nascer ou o por do sol , o problema é que o sol pode ter se posto ontem e não hoje, então preciso conferir
  1091. se estou vendo dados só de hoje ou de hoje e ontem
  1092. '''
  1093. horario=dados[0].split(" ")
  1094. luminosidade=dados[6].split(" ")
  1095. tabela_saida.write("\n")
  1096. tabela_saida.write("\n")
  1097.  
  1098. for i in range(len(luminosidade)):
  1099. if luminosidade[i]=="0" and luminosidade[i+1]=="1":
  1100. manha=horario[i+1].strip()
  1101. manhai=i+1
  1102. if luminosidade[i]=="1" and luminosidade[i+1]=="0":
  1103. noite=horario[i+1].strip()
  1104. noitei=i+1
  1105.  
  1106. if noitei>manhai:
  1107. claro=int(noite[0]+noite[1])-int(manha[0]+manha[1])#pega os primeiro caracteres com string e soma para faze o horario(ex 17:00 '1'+'7'= '17', e o int pega o valor )
  1108. escuro=24-claro
  1109.  
  1110. tabela_saida.write("Hoje o sol nasceu ás ")
  1111. tabela_saida.write(manha)
  1112. tabela_saida.write(" e se pos ás ")
  1113. tabela_saida.write(noite)
  1114. tabela_saida.write("\n")
  1115.  
  1116. tabela_saida.write("Com um total de ")
  1117. tabela_saida.write(str(claro))
  1118. tabela_saida.write("horas de sol e aproximandamente")
  1119. tabela_saida.write(str(escuro))
  1120. tabela_saida.write("horas de noite")
  1121. else:
  1122. claro=int(noite[0]+noite[1])-int(manha[0]+manha[1])#pega os primeiro caracteres com string e soma para faze o horario(ex 17:00 '1'+'7'= '17', e o int pega o valor )
  1123. escuro=24-claro
  1124.  
  1125. tabela_saida.write("Ontem o sol se pos ás ")
  1126. tabela_saida.write(noite)
  1127. tabela_saida.write(" e nasceu hoje nasceu ás ")
  1128. tabela_saida.write(manha)
  1129. tabela_saida.write(" \n")
  1130.  
  1131. tabela_saida.write("Com um total de ")
  1132. tabela_saida.write(str(escuro))
  1133. tabela_saida.write(" horas de noite e aproximandamente ")
  1134. tabela_saida.write(str(claro))
  1135. tabela_saida.write(" horas de dia")
  1136.  
  1137. '''----manda o preset da planta----'''
  1138.  
  1139. with open('arquivo_de_dados.txt', 'r') as arquivo_dados:
  1140. dados_gerais=arquivo_dados.readlines()
  1141.  
  1142. with open('arquivo_plantas.txt', 'r') as arquivo_das_platas:
  1143. dados_das_plantas=arquivo_das_platas.readlines()
  1144.  
  1145. planta=dados_gerais[3]
  1146.  
  1147. for i in range(len(dados_das_plantas)):
  1148. if dados_das_plantas[i]==planta:
  1149. inicio=i
  1150.  
  1151. '''----compra o tempo fototico----'''
  1152.  
  1153. tabela_saida.write(" \n")
  1154.  
  1155. delta_de_luz=int(dados_das_plantas[inicio+9])-claro
  1156. if delta_de_luz==0:
  1157. tabela_saida.write("Recebendo exatamente as ")
  1158. tabela_saida.write(str(dados_das_plantas[inicio+9]))
  1159. tabela_saida.write(" horas de lus desejadas")
  1160. if delta_de_luz>0:
  1161. tabela_saida.write("Recebendo ")
  1162. tabela_saida.write(str(delta_de_luz).strip("\n"))
  1163. tabela_saida.write(" hora(s) à mais do que às ")
  1164. tabela_saida.write(str(dados_das_plantas[inicio+9]).strip("\n"))
  1165. tabela_saida.write(" horas de luz desejadas")
  1166. if delta_de_luz<0:
  1167. tabela_saida.write("Recebendo ")
  1168. tabela_saida.write(str(-delta_de_luz))
  1169. tabela_saida.write(" hora(s) à menos do que às ")
  1170. tabela_saida.write(str(dados_das_plantas[inicio+9]))
  1171. tabela_saida.write(" horas de luz desejadas")
  1172.  
  1173.  
  1174. tabela_saida.close()
  1175.  
  1176. '''----manda o email----'''
  1177.  
  1178.  
  1179.  
  1180.  
  1181. destino=dados_gerais[0]
  1182. nome="relario diario " + str(now.tm_mday)+'/' + str(now.tm_mon) + '/' + str(now.tm_year)
  1183. corpo="aqui esta seu relatorio diario"
  1184. mandar_email(destino,nome,corpo,arquivo_dia)
  1185.  
  1186.  
  1187.  
  1188. def criar_aquivo_semanal():
  1189.  
  1190.  
  1191. '''não finalisado'''
  1192. global arquivo_semana
  1193.  
  1194. now = time.localtime()
  1195. arquivo_semana= "Relatorio semanal de " + str(now.tm_mday) + '-' + str(now.tm_mon) + '-' + str(now.tm_year) +' às ' + str(now.tm_hour) + ' e ' + str(now.tm_min) +'.txt'
  1196.  
  1197. nome=["Horario","Temperatura(Ar)","Umidade(Ar)","Temperatura(Solo)","Umidade(Ar)","umidade(Solo)","Chuva","Luz"]
  1198. now = time.localtime()
  1199.  
  1200. with open('arquivo_temp_dia.txt', 'r') as arquivo:
  1201. dados=arquivo.readlines()
  1202.  
  1203. tabela_saida=open(arquivo_semana, "w")
  1204.  
  1205.  
  1206.  
  1207. tabela_saida.write("Dados semanais de ")
  1208. tabela_saida.write(str(now.tm_mday))
  1209. tabela_saida.write("/")
  1210. tabela_saida.write(str(now.tm_mon))
  1211. tabela_saida.write("/")
  1212. tabela_saida.write(str(now.tm_year))
  1213. tabela_saida.write(" ás ")
  1214. tabela_saida.write(str(now.tm_hour))
  1215. tabela_saida.write(":")
  1216. tabela_saida.write(str(now.tm_min))
  1217. tabela_saida.write("\n")
  1218. tabela_saida.write("\n")
  1219.  
  1220. tabela_saida.writelines( dados )
  1221. #não precisa imprimir o |n por que o arquivo já faz isso.
  1222.  
  1223. tabela_saida.close()
  1224.  
  1225.  
  1226.  
  1227. '''----manda o email----'''
  1228.  
  1229. with open('arquivo_de_dados.txt', 'r') as arquivo:
  1230. dados_gerail=arquivo.readlines()
  1231.  
  1232. destino=dados_gerail[0]
  1233. nome="relario semanal"+str(now.tm_mday)+'/' + str(now.tm_mon) + '/' + str(now.tm_year)
  1234. corpo="aqui esta seu relatorio semanal"
  1235. mandar_email(destino,nome,corpo,arquivo_semana)
  1236.  
  1237.  
  1238. def dados_da_hora():
  1239.  
  1240. i=0
  1241. matriz_sensores=[]
  1242. while i >5:
  1243. umid_ar,temp_ar=temp_umid()
  1244. temp_solo=read_temp()
  1245. umidade_solo = umid_solo()
  1246. cv = chuva()
  1247. luz = luminosidade()
  1248. matriz_sensores.append[temp_ar,umid_ar,temp_solo,umidade_solo,cv,luz]
  1249. sleep(20)
  1250.  
  1251. '''tira as medias'''
  1252. temp_ar = (matriz_sensores[0][0]+matriz_sensores[0][1]+matriz_sensores[0][2]+matriz_sensores[0][3]+matriz_sensores[0][4])/5
  1253. umid_ar = (matriz_sensores[1][0]+matriz_sensores[1][1]+matriz_sensores[1][2]+matriz_sensores[1][3]+matriz_sensores[1][4])/5
  1254. temp_solo = (matriz_sensores[2][0]+matriz_sensores[2][1]+matriz_sensores[2][2]+matriz_sensores[2][3]+matriz_sensores[2][4])/5
  1255. if((matriz_sensores[3][0]+matriz_sensores[3][1]+matriz_sensores[3][2]+matriz_sensores[3][3]+matriz_sensores[3][4])/5)>0.5:
  1256. umidade_solo=1
  1257. else:
  1258. umidade_solo=0
  1259. if((matriz_sensores[4][0]+matriz_sensores[4][1]+matriz_sensores[4][2]+matriz_sensores[4][3]+matriz_sensores[4][4])/5)>0.5:
  1260. cv=1
  1261. else:
  1262. cv=0
  1263. if((matriz_sensores[5][0]+matriz_sensores[5][1]+matriz_sensores[5][2]+matriz_sensores[5][3]+matriz_sensores[5][4])/5)>0.5:
  1264. luz=1
  1265. else:
  1266. luz=1
  1267.  
  1268. hr = time.strftime("%H:%M")
  1269. return([hr,temp_ar,umid_ar,temp_solo,umidade_solo,cv,luz])
  1270. Sensor de chuva
  1271. def chuva():
  1272. cv = GPIO.input(11);
  1273. return cv
  1274.  
  1275. #Sensor umidade do solo
  1276. def umid_solo():
  1277. umidade_solo = GPIO.input(13);
  1278. return umidade_solo
  1279.  
  1280. #Sensor DHT11
  1281. def temp_umid():
  1282. gpio_dht = 22
  1283. umidade, temperatura = Adafruit_DHT.read_retry(sensor_dht, gpio_dht);
  1284. if umidade is None and temperatura is None:
  1285. return 0, 0
  1286. else:
  1287. return umidade, temperatura
  1288.  
  1289. #Sensor DS18B20
  1290. def read_temp_raw():
  1291. f = open(device_file, 'r')
  1292. lines = f.readlines()
  1293. f.close()
  1294. return lines
  1295.  
  1296. def read_temp():
  1297. lines = read_temp_raw()
  1298. while lines[0].strip()[-3:] != 'YES':
  1299. time.sleep(0.2)
  1300. lines = read_temp_raw()
  1301. equals_pos = lines[1].find('t=')
  1302. if equals_pos != -1:
  1303. temp_string = lines[1][equals_pos+2:]
  1304. temp_c = float(temp_string) / 1000.0 # temperatura em celsius
  1305. return temp_c
  1306. #sensor de luminosidade fica aqui
  1307. def luminosidade():
  1308. pass
  1309.  
  1310.  
  1311.  
  1312. Main()
Add Comment
Please, Sign In to add comment