Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '''imports para interface e uso geral'''
- from tkinter import *
- import time
- '''imports para email'''
- import smtplib
- from email.mime.text import MIMEText
- from email.mime.multipart import MIMEMultipart
- from email.mime.base import MIMEBase
- from email import encoders
- import threading
- '''imports para sensores'''
- import Adafruit_DHT
- import RPi.GPIO as GPIO
- import os
- import glob
- def Main():
- global root
- root = Tk()
- root.title("Saturn-Garden Administration System")
- root.geometry("1280x720")
- root.configure(background="white")
- criar_arquivos()
- h=time.localtime().tm_hour
- #h=18
- try:
- if 6<=h<18:
- fundo_foto= PhotoImage(file="fundo1.png")
- else:
- fundo_foto= PhotoImage(file="fundo2.png")
- Label(root,image=fundo_foto).place(x=-1,y=-1)
- except:
- pass
- iniciar= Button(root, text="Iniciar",width=16,height=3,fg="white",bg="#075385",font="arial 16",command=inicia)
- iniciar.place(x=240,y=0)
- dados= Button(root, text="Dados",width=16,height=3,fg="white",bg="#40ac23",font="arial 16",command=Novo)
- # Novo.bind("<Button-1>", hello)
- dados.place(x=440,y=0)
- Nplanta= Button(root, text="Controle planta",width=16,height=3,fg="white",font="arial 16",bg="#40ac23",command=Plantas)
- Nplanta.bind("<Button-1>", Plantas)
- Nplanta.place(x=640,y=0)
- Sair= Button(root, text="Sair",width=16,height=3,fg="white",bg="#c11500",font="arial 16",command=saida)
- Sair.place(x=840,y=0)
- root.mainloop()
- def criar_arquivos():
- '''formato:
- a funçao percorre o asquivo até achar \n e coloca os dados uma antes
- codigo
- Horário
- Temperatura(Ar)
- Umidade(Ar)
- Temperatura(Solo)
- umidade(Solo)
- Chuva
- Luz
- dia define se alem do horario eu tenho que por o dia, para a temp semanal
- '''
- '''cria o arquivo de dados'''
- try:
- arquivo=open("arquivo_de_dados.txt", "r")
- arquivo.close
- except:
- arquivo=open("arquivo_de_dados.txt", "w")
- arquivo.close
- '''cria o arquivo de presets'''
- try:
- arquivo=open('arquivo_plantas.txt', "r")
- arquivo.close
- except:
- arquivo=open('arquivo_plantas.txt', "w")
- arquivo.write("0\n")
- arquivo.write("Default\n")
- arquivo.write("30\n")
- arquivo.write("15\n")
- arquivo.write("100\n")
- arquivo.write("35\n")
- arquivo.write("40\n")
- arquivo.write("10\n")
- arquivo.write("40\n")
- arquivo.write("8\n")
- arquivo.close
- '''cria o arquivo o temporario do dia'''
- try:
- arquivo=open('arquivo_temp_dia.txt', "r")
- arquivo.close
- except:
- arquivo=open('arquivo_temp_dia.txt', "w")
- arquivo.write("Horário \n")
- arquivo.write("Temperatura(Ar) \n")
- arquivo.write("Umidade(Ar) \n")
- arquivo.write("Temperatura(Solo) \n")
- arquivo.write("Umidade(Solo) \n")
- arquivo.write("Chuva \n")
- arquivo.write("Luz \n")
- arquivo.close
- '''cria o arquivo o temporario da semana'''
- try:
- arquivo=open('arquivo_temp_semana.txt', "r")
- arquivo.close
- except:
- arquivo=open('arquivo_temp_semana.txt', "w")
- arquivo.write("Horário \n")
- arquivo.write("Temperatura(Ar) \n")
- arquivo.write("Umidade(Ar) \n")
- arquivo.write("Temperatura(Solo) \n")
- arquivo.write("Umidade(Solo) \n")
- arquivo.write("Chuva \n")
- arquivo.write("Luz \n")
- arquivo.close
- try:
- arquivo=open("Dados_de_funcionamento.txt", "r")
- arquivo.close
- except:
- arquivo=open("Dados_de_funcionamento.txt", "w")
- arquivo.write("0")
- arquivo.close
- def Novo():
- '''arquivo dados
- '''
- global janelaNovo
- with open('arquivo_de_dados.txt', 'r') as arquivo:
- dados=arquivo.readlines()
- print(dados)
- janelaNovo = Tk()
- janelaNovo.title("Dados do Usuario")
- janelaNovo.geometry("300x500")
- #janelaNovo.configure(background="white")
- '''tudo com M são variaveis globais de memoria'''
- global MEmail
- global Mhora
- global Mminutos
- global Listaplantas
- global Mdia_da_semana
- #-----------------------------------------------Email------------------------------------
- Label(janelaNovo,text="Coloque seu Email:",fg="black",font="arial 12").place(x=0,y=0)
- MEmail=Entry(janelaNovo,width=30,font="none 12")
- if len(dados)>1:
- MEmail.insert(END,(dados[0].strip()))#o strip tira o \n e evita problemas
- MEmail.place(x=1,y=30)
- #-----------------------------------------------hora do email------------------------------------
- Label(janelaNovo,text="Digite a hora do seu email diario:",fg="black",font="arial 12").place(x=0,y=60)
- Label(janelaNovo,text="Hora:",fg="black",font="arial 12").place(x=1,y=90)
- Label(janelaNovo,text="Minutos:",fg="black",font="arial 12").place(x=100,y=90)
- Mhora=Entry(janelaNovo,width=4,font="none 12")
- if len(dados)>1:
- Mhora.insert(END,(dados[1].strip()))
- Mhora.place(x=50,y=90)
- Mminutos=Entry(janelaNovo,width=3,font="none 12")
- if len(dados)>1:
- Mminutos.insert(END,(dados[2].strip()))
- Mminutos.place(x=170,y=90)
- #-----------------------------------------------janela de dia da semana------------------------------------
- Label(janelaNovo,text="Dia da semana",fg="black",font="arial 12").place(x=1,y=120)
- 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)
- Mdia_da_semana.place(x=1,y=150)
- if len(dados)>3:
- Mdia_da_semana.set(int(dados[4].strip()))
- #-----------------------------------------------janela de preset------------------------------------
- Label(janelaNovo,text="Nome do preset da planta",fg="black",font="arial 12").place(x=0,y=230)
- with open('arquivo_plantas.txt', 'r') as arquivo:
- dadosplanta=arquivo.readlines()
- i=0
- 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
- Listaplantas=Listbox(janelaNovo)
- while(i<len(dadosplanta)):
- Listaplantas.insert(i,dadosplanta[i+1])
- if len(dados)>1 and dadosplanta[i+1]==dados[3]:#acha o idex da planta para poder selecionar
- index_planta=i//10
- i+=10
- Listaplantas.place(x=1,y=260)
- if len(dados)>1 and index_planta!=-1:
- Listaplantas.select_set(index_planta)
- #-----------------------------------------------salvar------------------------------------
- Button(janelaNovo,text="Salvar Tudo",bg="#40ac23",fg="white",command=dadosgerais).place(x=0,y=460)
- janelaNovo.mainloop()
- def dadosgerais():
- '''formato
- email
- hora
- minuto
- nome do preset
- dia do email semanal
- '''
- '''testa os dados mandados, vê se só há numero'''
- global janelaErro
- try:
- hora=(int((Mhora.get()).strip()))
- minuto=(int((Mminutos.get()).strip()))
- except:
- janelaErro = Tk()
- janelaErro.title("Erro")
- janelaErro.configure(background="white")
- Label(janelaErro,text='há simbolos estranhos em horario ',fg="black",font="arial 12").pack()
- Button(janelaErro,text="Ok",bg="#40ac23",fg="white",command=fecha_erro_1).pack()
- return()
- if (0<=hora<24 and 0<=minuto<60):
- '''----------salva os dados-----------'''
- arquivo=open("arquivo_de_dados.txt", "w")
- arquivo.write(MEmail.get())
- arquivo.write("\n")
- arquivo.write(Mhora.get())
- arquivo.write("\n")
- arquivo.write(Mminutos.get())
- arquivo.write("\n")
- arquivo.write(Listaplantas.get(Listaplantas.curselection()))
- arquivo.write(str(Mdia_da_semana.get()))#não precisa por o \n oirque já esta no lista
- arquivo.close()
- print("dados salvos")
- janelaNovo.destroy()
- else:
- '''----------------avisa se houve erro----------------------'''
- janelaErro = Tk()
- janelaErro.title("Erro")
- janelaErro.configure(background="white")
- 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()
- Button(janelaErro,text="Ok",bg="#40ac23",fg="white",command=fecha_erro_1).pack()
- def fecha_erro_1():
- janelaErro.destroy()
- def Plantas(event):
- global janelaPlantas
- global Listaplantas
- janelaPlantas = Tk()
- janelaPlantas.title("Dados da planta")
- janelaPlantas.configure(background="white")
- topFrame=Frame(janelaPlantas)
- topFrame.pack()
- bottomFrame=Frame(janelaPlantas)
- bottomFrame.pack(side=BOTTOM)
- with open('arquivo_plantas.txt', 'r') as arquivo:
- dados=arquivo.readlines()
- i=0
- Listaplantas=Listbox(topFrame)
- if(len(dados)>1):
- while(i<len(dados)):
- Listaplantas.insert(i,dados[i+1])
- i+=10
- Listaplantas.pack()
- if (len(dados)>1):
- Editar= Button(bottomFrame, text="Editar",fg="white",bg="#40ac23",command=edita)
- Editar.pack(side=LEFT)
- Adicionar= Button(bottomFrame, text="Adicionar nova",fg="white",bg="#c11500",command=NovasPlantas)
- Adicionar.pack(side=LEFT)
- def edita():
- global Minicio
- with open('arquivo_plantas.txt', 'r') as arquivo:
- dados=arquivo.readlines()
- planta=Listaplantas.get(Listaplantas.curselection())
- for i in range(len(dados)):
- if dados[i]==planta:
- Minicio=i
- global janelaEditaPlantas
- global MTemparMAX
- global MTemparMIN
- global MHumidarMAX
- global MHumidarMIN
- global MTempsoloMAX
- global MTempsoloMIN
- global MHumidsoloMIN
- global MTempofoto
- global MNomeplanta
- janelaEditaPlantas = Tk()
- janelaEditaPlantas.title("Dados da planta")
- janelaEditaPlantas.geometry("325x450")
- #janelaEditaPlantas.configure(background="white")
- Label(janelaEditaPlantas,text="Temperatura do ar:",fg="black",font="arial 12").place(x=10,y=10)
- Label(janelaEditaPlantas,text="Max:",fg="black",font="arial 12").place(x=10,y=40)
- Label(janelaEditaPlantas,text="Min",fg="black",font="arial 12").place(x=100,y=40)
- MTemparMAX=Entry(janelaEditaPlantas,width=4,font="none 12")
- MTemparMAX.insert(END,str(dados[Minicio+1]).strip())
- MTemparMAX.place(x=50,y=40)
- MTemparMIN=Entry(janelaEditaPlantas,width=3,font="none 12")
- MTemparMIN.insert(END,dados[Minicio+2].strip())
- MTemparMIN.place(x=140,y=40)
- Label(janelaEditaPlantas,text="Umidade do ar:",fg="black",font="arial 12").place(x=10,y=70)
- Label(janelaEditaPlantas,text="Max:",fg="black",font="arial 12").place(x=10,y=100)
- Label(janelaEditaPlantas,text="Min:",fg="black",font="arial 12").place(x=100,y=100)
- MHumidarMAX=Entry(janelaEditaPlantas,width=4,font="none 12")
- MHumidarMAX.insert(END,dados[Minicio+3].strip())
- MHumidarMAX.place(x=50,y=100)
- MHumidarMIN=Entry(janelaEditaPlantas,width=3,font="none 12")
- MHumidarMIN.insert(END,dados[Minicio+4].strip())
- MHumidarMIN.place(x=140,y=100)
- Label(janelaEditaPlantas,text="Temperatura do solo:",fg="black",font="arial 12").place(x=10,y=130)
- Label(janelaEditaPlantas,text="Max:",fg="black",font="arial 12").place(x=10,y=160)
- Label(janelaEditaPlantas,text="Min:",fg="black",font="arial 12").place(x=100,y=160)
- MTempsoloMAX=Entry(janelaEditaPlantas,width=4,font="none 12")
- MTempsoloMAX.insert(END,dados[Minicio+5].strip())
- MTempsoloMAX.place(x=50,y=160)
- MTempsoloMIN=Entry(janelaEditaPlantas,width=3,font="none 12")
- MTempsoloMIN.insert(END,dados[Minicio+6].strip())
- MTempsoloMIN.place(x=140,y=160)
- Label(janelaEditaPlantas,text="Umidade minima do solo:",fg="black",font="arial 12").place(x=10,y=190)
- Label(janelaEditaPlantas,text="Min:",fg="black",font="arial 12").place(x=10,y=220)
- MHumidsoloMIN=Entry(janelaEditaPlantas,width=4,font="none 12")
- MHumidsoloMIN.insert(END,dados[Minicio+7].strip())
- MHumidsoloMIN.place(x=50,y=220)
- Label(janelaEditaPlantas,text="Tempo exposto á luz:",fg="black",font="arial 12").place(x=10,y=250)
- MTempofoto=Scale(janelaEditaPlantas,orient=HORIZONTAL,activebackground="#40ac23",length=300,from_=0,to=24,tickinterval=4)
- MTempofoto.set(int(dados[Minicio+8]))
- MTempofoto.place(x=10,y=270)
- Label(janelaEditaPlantas,text="Nome do preset",fg="black",font="arial 12").place(x=10,y=340)
- MNomeplanta=Entry(janelaEditaPlantas,width=30,font="none 12")
- MNomeplanta.insert(END,dados[Minicio].strip())
- MNomeplanta.place(x=10,y=370)
- Button(janelaEditaPlantas,text="Salvar Tudo",bg="#40ac23",fg="white",command=editarpreset).place(x=10,y=400)
- print(dados[Minicio-1])
- if (dados[Minicio-1]!='0\n'):
- Button(janelaEditaPlantas,text="Excluir",bg="#c11500",fg="white",command=exclui_pergunta).place(x=270,y=400)
- janelaEditaPlantas.mainloop()
- def editarpreset():
- '''----------testa as variavais, se não tem letra ou simbolos------------'''
- global janelaErro
- try:
- TemparMAX=(int((MTemparMAX.get()).strip()))
- TemparMIN=(int((MTemparMIN.get()).strip()))
- HumidarMAX=(int((MHumidarMAX.get()).strip()))
- HumidarMIN=(int((MHumidarMIN.get()).strip()))
- TempsoloMAX=(int((MTempsoloMAX.get()).strip()))
- TempsoloMIN=(int((MTempsoloMIN.get()).strip()))
- HumidsoloMIN=(int((MHumidsoloMIN.get()).strip()))
- except:
- janelaErro = Tk()
- janelaErro.title("Erro")
- janelaErro.configure(background="white")
- Label(janelaErro,text='Há simbolos estranhos em alguma das variáveis',bg="white",fg="black",font="arial 12").pack()
- Button(janelaErro,text="Ok",bg="#40ac23",fg="white",command=fecha_erro_1).pack()
- return()
- if(TemparMAX>=TemparMIN and HumidarMAX>=HumidarMIN and TempsoloMAX>=TempsoloMIN and HumidsoloMIN>=0 ):
- with open('arquivo_plantas.txt', 'r') as arquivo:
- dados=arquivo.readlines()
- dados[Minicio]=str((MNomeplanta.get()).strip()+"\n")
- dados[Minicio+1]=str((MTemparMAX.get()).strip()+"\n")
- dados[Minicio+2]=str((MTemparMIN.get()).strip()+"\n")
- dados[Minicio+3]=str((MHumidarMIN.get()).strip()+"\n")
- dados[Minicio+4]=str((MHumidarMIN.get()).strip()+"\n")
- dados[Minicio+5]=str((MTempsoloMAX.get()).strip()+"\n")
- dados[Minicio+6]=str((MTempsoloMIN.get()).strip()+"\n")
- dados[Minicio+7]=str((MHumidsoloMIN.get()).strip()+"\n")
- dados[Minicio+8]=(str(MTempofoto.get())+"\n")
- with open('arquivo_plantas.txt', 'w') as arquivo:
- arquivo.writelines( dados )
- janelaEditaPlantas.destroy()
- janelaPlantas.destroy()
- Plantas(1)
- else:
- janelaErro = Tk()
- janelaErro.title("Erro")
- janelaErro.configure(background="white")
- Label(janelaErro,text='Confira seus máximos e mínimos',bg="white",fg="black",font="arial 12").pack()
- Button(janelaErro,text="Ok",bg="#40ac23",fg="white",command=fecha_erro_1).pack()
- return()
- def exclui_pergunta():
- global janelaexcluipergunta
- janelaexcluipergunta = Tk()
- janelaexcluipergunta.title("excluir")
- janelaexcluipergunta.configure(background="white")
- Label(janelaexcluipergunta,text="Tem certeza que deseja excluir ?",bg="white",fg="black",font="arial 12").grid (row=0,column=0)
- Button(janelaexcluipergunta,text="Excluir",bg="#c11500",fg="white",command=exclui).grid (row=1,column=0)
- Button(janelaexcluipergunta,text="Cancelar",bg="#40ac23",fg="white",command=fechaexclui).grid (row=1,column=1)
- def fechaexclui ():
- janelaexcluipergunta.destroy()
- def exclui():
- janelaexcluipergunta.destroy()
- with open('arquivo_plantas.txt', 'r') as arquivo:
- dados=arquivo.readlines()
- f=Minicio-1
- novosdados=[]
- i=0
- while i<(len(dados)):
- if (i==f):
- i+=10
- else:
- novosdados.append(dados[i])
- i+=1
- with open('arquivo_plantas.txt', 'w') as arquivo:
- arquivo.writelines( novosdados )
- janelaEditaPlantas.destroy()
- janelaPlantas.destroy()
- Plantas(1)
- def NovasPlantas():
- """formato:
- numero da planta
- nome
- TemparMAX
- TemparMIN
- MHumidarMAX
- MHumidarMIN
- MTempsoloMAX
- MTempsoloMIN
- MHumidsoloMIN
- MTempofoto
- """
- global janelaNovasPlantas
- global MTemparMAX
- global MTemparMIN
- global MHumidarMAX
- global MHumidarMIN
- global MTempsoloMAX
- global MTempsoloMIN
- global MHumidsoloMIN
- global MTempofoto
- global MNomeplanta
- janelaNovasPlantas = Tk()
- janelaNovasPlantas.title("Dados da planta")
- #janelaNovasPlantas.configure(background="white")
- janelaNovasPlantas.geometry("325x450")
- Label(janelaNovasPlantas,text="Temperatura do ar:",fg="black",font="arial 12").place(x=10,y=10)
- Label(janelaNovasPlantas,text="Max:",fg="black",font="arial 12").place(x=10,y=40)
- Label(janelaNovasPlantas,text="Min",fg="black",font="arial 12").place(x=100,y=40)
- MTemparMAX=Entry(janelaNovasPlantas,width=4,font="none 12")
- MTemparMAX.place(x=50,y=40)
- MTemparMIN=Entry(janelaNovasPlantas,width=3,font="none 12")
- MTemparMIN.place(x=140,y=40)
- Label(janelaNovasPlantas,text="Umidade do ar:",fg="black",font="arial 12").place(x=10,y=70)
- Label(janelaNovasPlantas,text="Max:",fg="black",font="arial 12").place(x=10,y=100)
- Label(janelaNovasPlantas,text="Min:",fg="black",font="arial 12").place(x=100,y=100)
- MHumidarMAX=Entry(janelaNovasPlantas,width=4,font="none 12")
- MHumidarMAX.place(x=50,y=100)
- MHumidarMIN=Entry(janelaNovasPlantas,width=3,font="none 12")
- MHumidarMIN.place(x=140,y=100)
- Label(janelaNovasPlantas,text="Temperatura do solo:",fg="black",font="arial 12").place(x=10,y=130)
- Label(janelaNovasPlantas,text="Max:",fg="black",font="arial 12").place(x=10,y=160)
- Label(janelaNovasPlantas,text="Min:",fg="black",font="arial 12").place(x=100,y=160)
- MTempsoloMAX=Entry(janelaNovasPlantas,width=4,font="none 12")
- MTempsoloMAX.place(x=50,y=160)
- MTempsoloMIN=Entry(janelaNovasPlantas,width=3,font="none 12")
- MTempsoloMIN.place(x=140,y=160)
- Label(janelaNovasPlantas,text="Umidade minima do solo:",fg="black",font="arial 12").place(x=10,y=190)
- Label(janelaNovasPlantas,text="Min:",fg="black",font="arial 12").place(x=10,y=220)
- MHumidsoloMIN=Entry(janelaNovasPlantas,width=4,font="none 12")
- MHumidsoloMIN.place(x=50,y=220)
- Label(janelaNovasPlantas,text="Tempo exposto á luz:",fg="black",font="arial 12").place(x=10,y=250)
- MTempofoto=Scale(janelaNovasPlantas,orient=HORIZONTAL,activebackground="#40ac23",length=300,from_=0,to=24,tickinterval=4)
- MTempofoto.place(x=10,y=270)
- Label(janelaNovasPlantas,text="Nome do preset",fg="black",font="arial 12").place(x=10,y=340)
- MNomeplanta=Entry(janelaNovasPlantas,width=30,font="none 12")
- MNomeplanta.place(x=10,y=370)
- Button(janelaNovasPlantas,text="Salvar Tudo",bg="#40ac23",fg="white",command=adicionarpreset).place(x=10,y=400)
- janelaNovasPlantas.mainloop()
- def adicionarpreset():
- '''valores no txt:
- 0 - numero da planta(a primeira é 0)
- 1 - MNomeplanta
- 2 - TemparMAX
- 3 - TemparMIN
- 4 - MHumidarMAX
- 5 - MHumidarMIN
- 6 - MTempsoloMAX
- 7 - MTempsoloMIN
- 8 - MHumidsoloMIN
- 9 - MTempofoto
- '''
- try:
- TemparMAX=(int((MTemparMAX.get()).strip()))
- TemparMIN=(int((MTemparMIN.get()).strip()))
- HumidarMAX=(int((MHumidarMAX.get()).strip()))
- HumidarMIN=(int((MHumidarMIN.get()).strip()))
- TempsoloMAX=(int((MTempsoloMAX.get()).strip()))
- TempsoloMIN=(int((MTempsoloMIN.get()).strip()))
- HumidsoloMIN=(int((MHumidsoloMIN.get()).strip()))
- except:
- janelaErro = Tk()
- janelaErro.title("Erro")
- janelaErro.configure(background="white")
- Label(janelaErro,text='Há simbolos estranhos em alguma das variáveis',bg="white",fg="black",font="arial 12").pack()
- Button(janelaErro,text="Ok",bg="#40ac23",fg="white",command=fecha_erro_1).pack()
- return()
- if(TemparMAX>=TemparMIN and HumidarMAX>=HumidarMIN and TempsoloMAX>=TempsoloMIN and HumidsoloMIN>=0 ):
- with open('arquivo_plantas.txt', 'r') as arquivo:
- dados=arquivo.readlines()
- dados.append(str(len(dados)//10))
- dados.append('\n')
- dados.append(str(MNomeplanta.get()).strip())
- dados.append('\n')
- dados.append(str(MTemparMAX.get()).strip())
- dados.append('\n')
- dados.append(str(MTemparMIN.get()).strip())
- dados.append('\n')
- dados.append(str(MHumidarMAX.get()).strip())
- dados.append('\n')
- dados.append(str(MHumidarMIN.get()).strip())
- dados.append('\n')
- dados.append(str(MTempsoloMAX.get()).strip())
- dados.append('\n')
- dados.append(str(MTempsoloMIN.get()).strip())
- dados.append('\n')
- dados.append(str(MHumidsoloMIN.get()).strip())
- dados.append('\n')
- dados.append(str(MTempofoto.get()))
- dados.append('\n')
- print(dados)
- with open('arquivo_plantas.txt', 'w') as arquivo:
- arquivo.writelines( dados )
- else:
- janelaErro = Tk()
- janelaErro.title("Erro")
- janelaErro.configure(background="white")
- Label(janelaErro,text='Confira seus máximos e mínimos',bg="white",fg="black",font="arial 12").pack()
- Button(janelaErro,text="Ok",bg="#40ac23",fg="white",command=fecha_erro_1).pack()
- return()
- '''
- print(MNomeplanta.get())
- print(MTemparMAX.get())
- print(MTemparMIN.get())
- print(MHumidarMAX.get())
- print(MHumidarMIN.get())
- print(MTempsoloMAX.get())
- print(MTempsoloMIN.get())
- print(MHumidsoloMIN.get())
- print(MTempofoto.get())
- '''
- janelaNovasPlantas.destroy()
- janelaPlantas.destroy()
- Plantas(1)
- def saida():
- root.destroy()
- try:
- janelaPlantas.destroy()
- except:
- pass
- try:
- janelaNovo.destroy()
- except:
- pass
- try:
- janelaEditaPlantas.destroy()
- except:
- pass
- try:
- janelaNovasPlantas.destroy()
- except:
- pass
- try:
- janelainicia.destroy()
- except:
- pass
- try:
- janelaErro.destroy()
- except:
- pass
- try:
- janelaexcluipergunta.destroy()
- except:
- pass
- try:
- janela_erro_inicia.destroy()
- except:
- pass
- encerra()
- '''
- saida = Tk()
- saida .title("Saturn-Garden Adminitration Sistem")
- saida .configure(background="white")
- 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)
- '''
- def inicia():
- erro=False
- with open('arquivo_de_dados.txt', 'r') as arquivo:
- dados_gerais=arquivo.readlines()
- with open('arquivo_plantas.txt', 'r') as arquivo:
- dadosplanta=arquivo.readlines()
- if len(dados_gerais)<=1:
- erro_inicia(1)
- erro=True
- planta=dados_gerais[3]
- index_planta=-1
- i=0
- while(i<len(dadosplanta)):
- if dadosplanta[i+1]==dados_gerais[3]:#acha o idex da planta para poder selecionar
- index_planta=i//10
- i+=10
- if index_planta==-1:
- erro_inicia(2)
- erro=True
- if erro==False:
- #escreve para o arquivo entrar em loop
- funcionamento=open("Dados_de_funcionamento.txt", "w")
- funcionamento.write("1")
- funcionamento.close
- with open('Dados_de_funcionamento.txt', 'r') as funcionamento:
- dados_ligar=funcionamento.readlines()
- t = threading.Thread(target=principaldados)
- t.start()
- janeladoinicia()
- '''
- dados_sesores=dados_da_hora()'Dados_de_funcionamento.txt
- temp(dados_sensores,'arquivo_temp_dia.txt')
- temp(dados_sensores,'arquivo_temp_semana.txt')
- '''
- def erro_inicia(tipo):
- global janela_erro_inicia
- janela_erro_inicia = Tk()
- janela_erro_inicia.title("Erro")
- janela_erro_inicia.configure(background="white")
- if tipo==1:
- Label(janela_erro_inicia,text='Você precisa configurar seu email',bg="white",fg="black",font="arial 12").pack()
- Button(janela_erro_inicia,text="Ok",bg="#40ac23",fg="white",command=fecha_erro_3).pack()
- if tipo==2:
- Label(janela_erro_inicia,text='O Preset dessa planta foi deletado',bg="white",fg="black",font="arial 12").pack()
- Button(janela_erro_inicia,text="Ok",bg="#40ac23",fg="white",command=fecha_erro_3).pack()
- return()
- def fecha_erro_3():
- janela_erro_inicia.destroy()
- def janeladoinicia():
- global janelainicia
- janelainicia = Tk()
- janelainicia.title("Programa em andamento")
- janelainicia.configure(background="white")
- now = time.strftime("%H:%M:%S")
- Label(janelainicia,text="Horário:",bg="#31b027",fg="black",font="arial 15").grid (row=0,column=0,sticky=W)
- Label(janelainicia,text=now,bg="#31b027",fg="black",font="Helvetica 30 bold").grid (row=1,column=0,sticky=W)
- agora = time.localtime()
- tempo=str(59-agora.tm_min)+"min e "+str(60-agora.tm_sec)+"sec"
- Label(janelainicia,text="Tempo para a próxima medição:",bg="white",fg="black",font="arial 15").grid (row=0,column=1,sticky=W)
- Label(janelainicia,text=tempo,bg="white",fg="black",font="Helvetica 30 bold").grid (row=1,column=1,sticky=W)
- atualisar= Button(janelainicia, text="Atualizar",fg="white",bg="#40ac23",command=atualizartempo)
- atualisar.grid (row=2,column=0,sticky=W)
- desligar= Button(janelainicia, text="desligar",fg="white",bg="#c11500",command=encerra)
- desligar.grid (row=3,column=0,sticky=W)
- def atualizartempo():
- janelainicia.destroy()
- janeladoinicia()
- def encerra():
- arquivo=open("Dados_de_funcionamento.txt", "w")
- arquivo.write("0")
- arquivo.close
- try:
- janelainicia.destroy()
- except:
- pass
- def principaldados():
- '''Dados_de_funcionamento.txt
- armazena 2 informaçoes
- 1-se estava o programa esta ligado(1-sim\0-não)
- 2-em que dia da semana o programa esta
- '''
- '''o 'e' é recebido da função a cada clico'''
- with open('Dados_de_funcionamento.txt', 'r') as arquivo_ligar:
- dados_ligar=arquivo_ligar.readlines()
- now = time.localtime()
- minuto=now.tm_min
- hora=now.tm_hour
- dia_semana=now.tm_wday
- print(hora,minuto)
- dia=(str(now.tm_mday)+"/"+str(now.tm_mon)+"/"+str(now.tm_mday)+" ")
- if minuto==57:
- dados_sesores=dados_da_hora()
- temp(dados_sensores,'arquivo_temp_dia.txt')
- detecta_problemas(dados_sesores)#procura se tem problema depois de colocar na temp para poder enviar o arquivo
- dados_sensores[0]=dia+dados_sensores[0]#coloca o dia para a tabela semanal
- temp(dados_sensores,'arquivo_temp_semana.txt')
- with open('arquivo_de_dados.txt', 'r') as arquivo_dados:
- dados=arquivo_dados.readlines()
- if hora==int(dados[1].strip("\n")) and minuto==int(dados[2].strip("\n")):
- criar_aquivo_diario()
- apaga_temp('arquivo_temp_dia.txt')
- if int(dia_semana)==(int(dados[4])):
- criar_aquivo_semanal()
- apaga_temp('arquivo_temp_semana.txt')
- if int(dados_ligar[0])==1:
- time.sleep(60)
- principaldados()
- def apaga_temp(tipo):
- '''reinicia o arquivo temporario apos uma medição'''
- arquivo=open(tipo, "w")
- arquivo.write("Horário \n")
- arquivo.write("Temperatura(Ar) \n")
- arquivo.write("Umidade(Ar) \n")
- arquivo.write("Temperatura(Solo) \n")
- arquivo.write("Umidade(Solo) \n")
- arquivo.write("Chuva \n")
- arquivo.write("Luz \n")
- arquivo.close
- def mandar_email(destino,nome,corpo,arquivo):
- email_user = 'TesteequeipeSaturno@gmail.com'
- email_password = 'planeta7'
- email_send = destino
- subject = nome
- msg = MIMEMultipart()
- msg['From'] = email_user
- msg['To'] = email_send
- msg['Subject'] = subject
- body = corpo
- msg.attach(MIMEText(body,'plain'))
- filename=arquivo
- attachment =open(filename,'rb')
- nome_do_anexo="attachment; filename= "+nome+".txt"
- part = MIMEBase('application','octet-stream')
- part.set_payload((attachment).read())
- encoders.encode_base64(part)
- part.add_header('Content-Disposition',nome_do_anexo)
- msg.attach(part)
- text = msg.as_string()
- server = smtplib.SMTP('smtp.gmail.com',587)
- server.starttls()
- server.login(email_user,email_password)
- server.sendmail(email_user,email_send,text)
- server.quit()
- def detecta_problemas(dados_sesores):
- '''
- codigo da string
- 0-Horario
- 1-Temperatura(Ar)
- 2-Umidade(Ar)
- 3-Temperatura(Solo)
- 4-Umidade(Solo)
- 5-Chuva
- 6-Luz
- codigo do arquivo das plantas
- inicio-1 - numeroplanta
- inicio - Nomeplanta
- inicio + 1 - TemparMAX
- inicio + 2 - TemparMIN
- inicio + 3 - HumidarMAX
- inicio + 4 - HumidarMIN
- inicio + 5 - TempsoloMAX
- inicio + 6 - TempsoloMIN
- inicio + 7 - HumidsoloMIN
- inicio + 8 - Tempofoto
- codigo do arquivo geral:
- 0-email
- 1-hora de envio
- 2-minutos do envio
- 3-nome do preset
- '''
- with open('arquivo_de_dados.txt', 'r') as arquivo_dados:
- dados_gerais=arquivo_dados.readlines()
- with open('arquivo_plantas.txt', 'r') as arquivo_das_platas:
- dados_plantas=arquivo_das_platas.readlines()
- planta=dados_gerais[3]
- for i in range(len(dados_plantas)):
- if dados_plantas[i]==planta:
- inicio=i
- problem=False
- lista_problemas=[]
- delta_temp=int(dados_sesores[1])-int(dados_plantas[inicio+1].strip())
- if delta_temp>0:
- problem=True
- problema="temperatura do ar " + str(delta_temp)+" Cº acima do normal"
- lista_problemas.append(problema)
- delta_temp=int(dados_plantas[inicio+2].strip())-int(dados_sesores[1])
- if delta_temp>0:
- problem=True
- problema="temperatura do ar " + str(delta_temp)+" Cº abaixo do normal"
- lista_problemas.append(problema)
- delta_humd= int(dados_sesores[2])-int(dados_plantas[inicio+3].strip())
- if delta_humd>0:
- problem=True
- problema="umidade do ar " + str(delta_humd)+"% acima do normal"
- lista_problemas.append(problema)
- delta_humd=int(dados_plantas[inicio+4].strip())-int(dados_sesores[2])
- if delta_humd>0:
- problem=True
- problema="umidade do ar " + str(delta_humd)+"% abaixo do normal"
- lista_problemas.append(problema)
- delta_temp=int(dados_sesores[3])-int(dados_plantas[inicio+5].strip())
- if delta_temp>0:
- problem=True
- problema="temperatura do solo " + str(delta_temp)+" Cº acima do normal"
- lista_problemas.append(problema)
- delta_temp=int(dados_plantas[inicio+6].strip())-int(dados_sesores[3])
- if delta_temp>0:
- problem=True
- problema="temperatura so solo " + str(delta_temp)+" Cº abaixo do normal"
- lista_problemas.append(problema)
- if int(dados_sesores[4])==0:
- problem=True
- problema="o solo esta seco"
- lista_problemas.append(problema)
- if problem:
- destino=destino=dados_gerais[0]
- now = time.localtime()
- nome= "Equipe Saturno: Aviso de ocorrencia " + time.strftime("%H:%M")
- corpo="destectamos os seguintes problemas na sua plantação:\n"
- i=1
- for p in lista_problemas:
- corpo=corpo+str(i)+'-'+p+'\n'
- i=i+1
- arquivo_de_envio='arquivo_temp_dia.txt'
- mandar_email(destino,nome,corpo,arquivo_de_envio)
- def temp(dados_sensores,tipo):
- '''a funçao percorre o asquivo até achar \n e coloca os dados uma antes
- codigo
- Horario
- Temperatura(Ar)
- Umidade(Ar)
- Temperatura(Solo)
- umidade(Solo)
- Chuva
- Luz
- dia define se alem do horario eu tenho que por o dia, para a temp semanal
- '''
- e=0
- with open(tipo, 'r') as arquivo:
- dados=arquivo.readlines()
- for i in range(len(dados)):
- linha=dados[i].strip("\n")
- linha=linha+str(dados_sensores[e])+" \n"
- dados[i]=linha
- e+=1
- print(dados)
- with open(tipo, 'w') as arquivo:
- arquivo.writelines( dados )
- def criar_aquivo_diario():
- global arquivo_dia
- now = time.localtime()
- 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'
- now = time.localtime()
- with open('arquivo_temp_dia.txt', 'r') as arquivo:
- dados=arquivo.readlines()
- tabela_saida=open(arquivo_dia, "w")
- tabela_saida.write("Dados diarios de ")
- tabela_saida.write(str(now.tm_mday))
- tabela_saida.write("/")
- tabela_saida.write(str(now.tm_mon))
- tabela_saida.write("/")
- tabela_saida.write(str(now.tm_year))
- tabela_saida.write(" ás ")
- tabela_saida.write(str(now.tm_hour))
- tabela_saida.write(":")
- tabela_saida.write(str(now.tm_min))
- tabela_saida.write("\n")
- tabela_saida.write("\n")
- tabela_saida.writelines( dados )
- #não precisa imprimir o /n por que o arquivo já faz isso.
- ''' 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
- se estou vendo dados só de hoje ou de hoje e ontem
- '''
- horario=dados[0].split(" ")
- luminosidade=dados[6].split(" ")
- tabela_saida.write("\n")
- tabela_saida.write("\n")
- for i in range(len(luminosidade)):
- if luminosidade[i]=="0" and luminosidade[i+1]=="1":
- manha=horario[i+1].strip()
- manhai=i+1
- if luminosidade[i]=="1" and luminosidade[i+1]=="0":
- noite=horario[i+1].strip()
- noitei=i+1
- if noitei>manhai:
- 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 )
- escuro=24-claro
- tabela_saida.write("Hoje o sol nasceu ás ")
- tabela_saida.write(manha)
- tabela_saida.write(" e se pos ás ")
- tabela_saida.write(noite)
- tabela_saida.write("\n")
- tabela_saida.write("Com um total de ")
- tabela_saida.write(str(claro))
- tabela_saida.write("horas de sol e aproximandamente")
- tabela_saida.write(str(escuro))
- tabela_saida.write("horas de noite")
- else:
- 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 )
- escuro=24-claro
- tabela_saida.write("Ontem o sol se pos ás ")
- tabela_saida.write(noite)
- tabela_saida.write(" e nasceu hoje nasceu ás ")
- tabela_saida.write(manha)
- tabela_saida.write(" \n")
- tabela_saida.write("Com um total de ")
- tabela_saida.write(str(escuro))
- tabela_saida.write(" horas de noite e aproximandamente ")
- tabela_saida.write(str(claro))
- tabela_saida.write(" horas de dia")
- '''----manda o preset da planta----'''
- with open('arquivo_de_dados.txt', 'r') as arquivo_dados:
- dados_gerais=arquivo_dados.readlines()
- with open('arquivo_plantas.txt', 'r') as arquivo_das_platas:
- dados_das_plantas=arquivo_das_platas.readlines()
- planta=dados_gerais[3]
- for i in range(len(dados_das_plantas)):
- if dados_das_plantas[i]==planta:
- inicio=i
- '''----compra o tempo fototico----'''
- tabela_saida.write(" \n")
- delta_de_luz=int(dados_das_plantas[inicio+9])-claro
- if delta_de_luz==0:
- tabela_saida.write("Recebendo exatamente as ")
- tabela_saida.write(str(dados_das_plantas[inicio+9]))
- tabela_saida.write(" horas de lus desejadas")
- if delta_de_luz>0:
- tabela_saida.write("Recebendo ")
- tabela_saida.write(str(delta_de_luz).strip("\n"))
- tabela_saida.write(" hora(s) à mais do que às ")
- tabela_saida.write(str(dados_das_plantas[inicio+9]).strip("\n"))
- tabela_saida.write(" horas de luz desejadas")
- if delta_de_luz<0:
- tabela_saida.write("Recebendo ")
- tabela_saida.write(str(-delta_de_luz))
- tabela_saida.write(" hora(s) à menos do que às ")
- tabela_saida.write(str(dados_das_plantas[inicio+9]))
- tabela_saida.write(" horas de luz desejadas")
- tabela_saida.close()
- '''----manda o email----'''
- destino=dados_gerais[0]
- nome="relario diario " + str(now.tm_mday)+'/' + str(now.tm_mon) + '/' + str(now.tm_year)
- corpo="aqui esta seu relatorio diario"
- mandar_email(destino,nome,corpo,arquivo_dia)
- def criar_aquivo_semanal():
- '''não finalisado'''
- global arquivo_semana
- now = time.localtime()
- 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'
- nome=["Horario","Temperatura(Ar)","Umidade(Ar)","Temperatura(Solo)","Umidade(Ar)","umidade(Solo)","Chuva","Luz"]
- now = time.localtime()
- with open('arquivo_temp_dia.txt', 'r') as arquivo:
- dados=arquivo.readlines()
- tabela_saida=open(arquivo_semana, "w")
- tabela_saida.write("Dados semanais de ")
- tabela_saida.write(str(now.tm_mday))
- tabela_saida.write("/")
- tabela_saida.write(str(now.tm_mon))
- tabela_saida.write("/")
- tabela_saida.write(str(now.tm_year))
- tabela_saida.write(" ás ")
- tabela_saida.write(str(now.tm_hour))
- tabela_saida.write(":")
- tabela_saida.write(str(now.tm_min))
- tabela_saida.write("\n")
- tabela_saida.write("\n")
- tabela_saida.writelines( dados )
- #não precisa imprimir o |n por que o arquivo já faz isso.
- tabela_saida.close()
- '''----manda o email----'''
- with open('arquivo_de_dados.txt', 'r') as arquivo:
- dados_gerail=arquivo.readlines()
- destino=dados_gerail[0]
- nome="relario semanal"+str(now.tm_mday)+'/' + str(now.tm_mon) + '/' + str(now.tm_year)
- corpo="aqui esta seu relatorio semanal"
- mandar_email(destino,nome,corpo,arquivo_semana)
- def dados_da_hora():
- i=0
- matriz_sensores=[]
- while i >5:
- umid_ar,temp_ar=temp_umid()
- temp_solo=read_temp()
- umidade_solo = umid_solo()
- cv = chuva()
- luz = luminosidade()
- matriz_sensores.append[temp_ar,umid_ar,temp_solo,umidade_solo,cv,luz]
- sleep(20)
- '''tira as medias'''
- temp_ar = (matriz_sensores[0][0]+matriz_sensores[0][1]+matriz_sensores[0][2]+matriz_sensores[0][3]+matriz_sensores[0][4])/5
- umid_ar = (matriz_sensores[1][0]+matriz_sensores[1][1]+matriz_sensores[1][2]+matriz_sensores[1][3]+matriz_sensores[1][4])/5
- temp_solo = (matriz_sensores[2][0]+matriz_sensores[2][1]+matriz_sensores[2][2]+matriz_sensores[2][3]+matriz_sensores[2][4])/5
- if((matriz_sensores[3][0]+matriz_sensores[3][1]+matriz_sensores[3][2]+matriz_sensores[3][3]+matriz_sensores[3][4])/5)>0.5:
- umidade_solo=1
- else:
- umidade_solo=0
- if((matriz_sensores[4][0]+matriz_sensores[4][1]+matriz_sensores[4][2]+matriz_sensores[4][3]+matriz_sensores[4][4])/5)>0.5:
- cv=1
- else:
- cv=0
- if((matriz_sensores[5][0]+matriz_sensores[5][1]+matriz_sensores[5][2]+matriz_sensores[5][3]+matriz_sensores[5][4])/5)>0.5:
- luz=1
- else:
- luz=1
- hr = time.strftime("%H:%M")
- return([hr,temp_ar,umid_ar,temp_solo,umidade_solo,cv,luz])
- Sensor de chuva
- def chuva():
- cv = GPIO.input(11);
- return cv
- #Sensor umidade do solo
- def umid_solo():
- umidade_solo = GPIO.input(13);
- return umidade_solo
- #Sensor DHT11
- def temp_umid():
- gpio_dht = 22
- umidade, temperatura = Adafruit_DHT.read_retry(sensor_dht, gpio_dht);
- if umidade is None and temperatura is None:
- return 0, 0
- else:
- return umidade, temperatura
- #Sensor DS18B20
- 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 # temperatura em celsius
- return temp_c
- #sensor de luminosidade fica aqui
- def luminosidade():
- pass
- Main()
Add Comment
Please, Sign In to add comment