def __init__(self, json_file, PROVENANCE_SURE, DESTINATAIRES): print "on gère les courriels" threading.Thread.__init__(self) parser = argparse.ArgumentParser(parents=[argparser]) self.flags = parser.parse_args() self.PROVENANCE_SURE = PROVENANCE_SURE self.json_file = json_file self.parser = argparse.ArgumentParser(parents=[argparser]) self.gmail_lire = Gmail(self.flags, client_secret_file =self.json_file, oauth_scope = 'https://www.googleapis.com/auth/gmail.readonly') messages = self.gmail_lire.getMessagesList() if messages['messages']: self.l_id_courriels = [ msg['id'] for msg in messages['messages']] #= gmail.getMessageDetails(msg['id']) self.destinataires = DESTINATAIRES systeme = platform.system() self.rec = RecuperateurDonnees(os.getcwd()) print "initialisation" self.gmail_envoyer = Gmail(self.flags, client_secret_file =self.json_file, oauth_scope = 'https://www.googleapis.com/auth/gmail.send') texte = """ Bonjour\n\nLe service d'arrosage automatique a redémarré.\n\nCordialement\n\n Clément Besnier """ message = Message(sender="*****@*****.**",to="*****@*****.**",subject="rapport météo", message_text= texte, service=self.gmail_envoyer.gmail_service) #message = Message_Attachment(sender="*****@*****.**",to=destinataire,subject="rapport météo", # message_text= "test", file_dir=os.getcwd(), filename= "", # service=gmail.gmail_service) message.sendMessage(self.gmail_envoyer.gmail_service, "*****@*****.**")
def __init__(self, lePort): threading.Thread.__init__(self) self.commu = Communication_Arduino(lePort) self.recuperateur = RecuperateurDonnees()
class GestionnaireGmail(threading.Thread): def __init__(self, json_file, PROVENANCE_SURE, DESTINATAIRES): print "on gère les courriels" threading.Thread.__init__(self) parser = argparse.ArgumentParser(parents=[argparser]) self.flags = parser.parse_args() self.PROVENANCE_SURE = PROVENANCE_SURE self.json_file = json_file self.parser = argparse.ArgumentParser(parents=[argparser]) self.gmail_lire = Gmail(self.flags, client_secret_file =self.json_file, oauth_scope = 'https://www.googleapis.com/auth/gmail.readonly') messages = self.gmail_lire.getMessagesList() if messages['messages']: self.l_id_courriels = [ msg['id'] for msg in messages['messages']] #= gmail.getMessageDetails(msg['id']) self.destinataires = DESTINATAIRES systeme = platform.system() self.rec = RecuperateurDonnees(os.getcwd()) print "initialisation" self.gmail_envoyer = Gmail(self.flags, client_secret_file =self.json_file, oauth_scope = 'https://www.googleapis.com/auth/gmail.send') texte = """ Bonjour\n\nLe service d'arrosage automatique a redémarré.\n\nCordialement\n\n Clément Besnier """ message = Message(sender="*****@*****.**",to="*****@*****.**",subject="rapport météo", message_text= texte, service=self.gmail_envoyer.gmail_service) #message = Message_Attachment(sender="*****@*****.**",to=destinataire,subject="rapport météo", # message_text= "test", file_dir=os.getcwd(), filename= "", # service=gmail.gmail_service) message.sendMessage(self.gmail_envoyer.gmail_service, "*****@*****.**") def run(self): derniere_mise_a_jour = time.time() periode_mise_a_jour_gmail = 120 six_jours = 518400 trois_jours = 3*24*3600 reinitialisation_gmail = time.time() #maintenant = 0 #permet d'envoyer un message de démarrage while True: maintenant = time.time() if distance_seconde(maintenant,derniere_mise_a_jour) > periode_mise_a_jour_gmail: print "on vérifie les courriels reçus" messages = self.gmail_lire.getMessagesList() if messages['messages']: l_id = [msg['id'] for msg in messages['messages'] if not msg['id'] in self.l_id_courriels ] for msg_id in l_id: m = self.gmail_lire.getMessageDetails(msg_id) if m.getFrom() in self.PROVENANCE_SURE: self.rec.enregistrer_courriel(self, m.getFrom(), m.getTo(), m.getSubject(), m.getText(self.gmail_lire.gmail_service, 'me', msg_id)) if m.getSubject() == "ordre": l_instructions = extraire_ordre(m.getText(self.gmail_lire.gmail_service,"*****@*****.**", msg_id)) # for instruction in l_instructions: # if instruction['categorie'] # RecuperateurDonnees.obtenir_conditions_meteorologiques() elif m.getSubject() == "questions": l_instructions = extraire_question(m.getText(self.gmail_lire.gmail_service, "*****@*****.**", msg_id)) else: pass if m.getSubject() == "IP": self.gmail_envoyer = Gmail(self.flags, client_secret_file =self.json_file, oauth_scope = 'https://www.googleapis.com/auth/gmail.send') #ip = os.system("ifconfig") message = Message(sender="*****@*****.**",to="*****@*****.**",subject="IP", message_text= "faut m'extraire", service=self.gmail_envoyer.gmail_service) message.sendMessage(self.gmail_envoyer.gmail_service, "*****@*****.**") self.gmail_lire = Gmail(self.flags, client_secret_file =self.json_file, oauth_scope = 'https://www.googleapis.com/auth/gmail.readonly') derniere_mise_a_jour = maintenant elif distance_jour(maintenant, reinitialisation_gmail) > 6: print "on réinitialise la connexion" self.gmail_lire = Gmail(self.flags, client_secret_file = self.json_file, oauth_scope = 'https://www.googleapis.com/auth/gmail.readonly') self.gmail_envoyer = Gmail(self.flags, client_secret_file = self.json_file, oauth_scope = 'https://www.googleapis.com/auth/gmail.send') reinitialisation_gmail = maintenant elif distance_jour(maintenant, reinitialisation_gmail) > 3: print "on envoie un courriel à tout le monde" for destinataire in self.destinataires: print self.rec.obtenir_conditions_meteorologiques() #res = [(i.temperature,i.humidite_relative, i.date) for i in ConditionsMeteorologiques.objects.all() if datetime.timedelta.total_seconds(i.date - datetime.datetime.now())] self.rec.obtenir_conditions_meteorologiques_depuis(3) message = Message_Attachment(sender="*****@*****.**",to="*****@*****.**",subject="rapport météo", message_text= "test", service=self.gmail_envoyer.gmail_service) #message = Message_Attachment(sender="*****@*****.**",to=destinataire,subject="rapport météo", # message_text= "test", file_dir=os.getcwd(), filename= "", # service=gmail.gmail_service) message.sendMessage(self.gmail_envoyer.gmail_service, "*****@*****.**")
class Decideur(threading.Thread): def __init__(self, lePort): threading.Thread.__init__(self) self.commu = Communication_Arduino(lePort) self.recuperateur = RecuperateurDonnees() def run(self): """ Méthode principale, là où tout se passe. :return: """ print "on mesure aussi !" derniere_mise_a_jour = time.time() derniere_prise_mesure = time.time() temps_dernier_arrosage = 0 en_train_d_arroser = False debut_reelle_arrosage = False # compteur, temperature, humidite, date_heure = self.recuperateur.obtenir_derniere_mesure_meteo() #temperature = derniere_condo_meteo.temperature #humidite = derniere_condo_meteo.humidite_relative # compteur, temperature_min, humidite_max, frequence_min, heure_min, heure_max, duree_arrosage_prevue = self.recuperateur.obtenir_conditions_arrosage() #ConditionArrosage.objects.get(id=max([i.id for i in ConditionArrosage.objects.all()])) #print derniere_condo_arrosage #temperature_min = derniere_condo_arrosage.temperature_min #humidite_max = derniere_condo_arrosage.humidite_max #frequence_min = derniere_condo_arrosage.frequence_min #heure_min = derniere_condo_arrosage.heure_min #heure_max = derniere_condo_arrosage.heure_max #duree_arrosage_prevue = derniere_condo_arrosage.duree while True: #print 'on vérifie' try: maintenant = time.time() # mise à jour des données toutes les 5 minutes """ if distance_seconde(maintenant, derniere_mise_a_jour) > 300: print "on fait la mise à jour des paramètres d'arrosage" #se tient à jour des paramètres pour arroser derniere_condo_arrosage = ConditionArrosage.objects.get( id=max([i.id for i in ConditionArrosage.objects.all()])) temperature_min = derniere_condo_arrosage.temperature_min humidite_max = derniere_condo_arrosage.humidite_max frequence_min = derniere_condo_arrosage.frequence_min heure_min = derniere_condo_arrosage.heure_min heure_max = derniere_condo_arrosage.heure_max duree_arrosage_prevue = derniere_condo_arrosage.duree derniere_mise_a_jour = maintenant if humidite < humidite_max and distance_jour(maintenant, temps_dernier_arrosage) > \ frequence_min and donner_heure(maintenant) > heure_min and donner_heure(maintenant) < heure_max: #vérifie si les conditions pour arroser sont remplies, si oui, on arrose print "on arrose" self.commu.arroser() temps_dernier_arrosage = time.time() lu = self.commu.ecouter() if lu == "pompe_allumee": debut_reelle_arrosage = maintenant en_train_d_arroser = True if distance_seconde(maintenant, debut_reelle_arrosage) > duree_arrosage_prevue and en_train_d_arroser: print "on n'arrose plus" #si la durée de l'arrosage est supérieure à la durée prévue, alors on éteint la pompe self.commu.eteindre_arrosage() lu = self.commu.ecouter() if lu == "pompe_eteinte": fin_reelle_arrosage = maintenant en_train_d_arroser = False duree_reelle_arrosage = distance_seconde(debut_reelle_arrosage, fin_reelle_arrosage) Arrosage(duree=duree_reelle_arrosage).save() """ print distance_seconde(maintenant, derniere_prise_mesure) if distance_seconde(maintenant, derniere_prise_mesure) > 30: #demande la température et l'enregistre dans une base de donnée self.commu.combien_temperature() print "on mesure la température" time.sleep(1) lu = self.commu.ecouter() print lu if re.match(r"(RX : )[0-9].\.[0-9].", lu) is not None: temperature = lu[5:] #TODO à remettre sans RX : print temperature elif re.match(r"[0-9].\.[0-9].", lu): temperature = lu print temperature else: print "mauvaise donnée" temperature = 0 continue self.commu.combien_humidite() print "on mesure l'humidité" time.sleep(1) lu = self.commu.ecouter() print lu if re.match(r"(RX : )[0-9].\.[0-9].", lu) is not None: humidite = lu[5:] #TODO à remettre sans RX : print humidite elif re.match(r"[0-9].\.[0-9].", lu): humidite = lu print humidite else: print "mauvaise donnée humidité" humidite = 0 continue #on met à jour la date de dernière mesure et la dernière mesure que si on a bien eu la température ## et l'humidité self.recuperateur.enregistrer_mesure(temperature, humidite)#ConditionsMeteorologiques(temperature=temperature, humidite_relative=humidite).save() derniere_prise_mesure = maintenant if distance_seconde(maintenant, derniere_prise_mesure) > 3600: pass #TODO problème de réception, il faut envoyer un courriel d'erreur ! time.sleep(0.5) except SerialException: print "impossible d'accéder au port" break """