Étape 3: Python Code
Le code python est comme ci-dessous :#! / usr/bin/python
#-*-coding : utf-8-*-
Import smtplib
moment de l’importation
de l’adc import analog_read
importer gpio
moment de l’importation
importation imaplib
importer les uuid
de courriel courriel import
importation imaplib
moment de l’importation
importer les uuid
de courriel courriel import
relay_pin = « gpio2 »
sensor_pin = « gpio4 »
#the Voici pour l’envoi de courriel
serveur = « smtp.gmail.com »
port = 587
sender = ' xxxxxx
destinataire = ' xxxxx
mot de passe = « xxxxx »
sujet = « Ouvre porte de Garage »
corps = ' la porte du garage est ouverte. S’il vous plaît vérifier '
#the qui suit sert à recevoir des e-mail
IMAP_SERVER = « imap.gmail.com »
IMAP_PORT = « 993 »
IMAP_USE_SSL = True
imap_username = ' xxxxx
imap_password = « xxxxx »
num = 0
message_content = « 1 » ;
def delay(ms) :
Time.Sleep(1.0*ms/1000)
def setup() :
gpio.pinMode (relay_pin, gpio. SORTIE)
gpio.pinMode (sensor_pin, gpio. ENTRÉE)
gpio.digitalWrite (relay_pin, gpio. FAIBLE)
corps = "" + body + ""
headers = ["de:" + expéditeur,
"Sujet:" + sujet,
"À:" + destinataire,
"MIME-Version : 1.0",
"Content-Type : text/html"]
headers = "\r\n".join(headers)
replysubject = 'J’ai fermé la porte de Garage'
ReplyBody = « J’ai fermé la porte de Garage. »
ReplyBody = "" + replybody + ""
replyheaders = ["de:" + expéditeur,
"Sujet:" + replysubject,
"À:" + destinataire,
"MIME-Version : 1.0",
"Content-Type : text/html"]
replyheaders = "\r\n".join(replyheaders)
classe MailBox(object) :
def __init__ (self, utilisateur, mot de passe) :
Self.User = utilisateur
Self.password = mot de passe
Si IMAP_USE_SSL :
Self.IMAP = imaplib. IMAP4_SSL(IMAP_SERVER, IMAP_PORT)
autre chose :
Self.IMAP = imaplib. IMAP4(IMAP_SERVER, IMAP_PORT)
def __enter__(self) :
Self.IMAP.Login (self.user, self.password)
Retour à soi
def __exit__ (self, type, valeur, retraçage) :
Self.IMAP.Close()
Self.IMAP.Logout()
def get_count(self) :
Self.IMAP.Select('Inbox')
statut, data = self.imap.search (None, « Invisible »)
retourner la somme (1 pour le num dans data[0].split())
def fetch_message (self, num) :
Self.IMAP.Select('Inbox')
statut, data = self.imap.fetch(str(num), "(RFC822)")
email_msg = email.message_from_string(data[0][1])
retour email_msg
def delete_message (self, num) :
Self.IMAP.Select('Inbox')
Self.IMAP.Store (num « + drapeaux », r « \Deleted »)
Self.IMAP.Expunge()
def print_msgs(self) :
Self.IMAP.Select('Inbox')
statut, data = self.imap.search (None, « Invisible »)
num de #for dans reversed(data[0].split()) :
statut, data = self.imap.fetch (num, "(RFC822)")
Self.IMAP.Store (num, « + drapeaux », « \\Deleted »)
MSG=email.message_from_string(Data[0][1])
message_content=MSG.get_all("subject")
Si « porte étroite » dans message_content :
Retourne 1
def get_latest_email_sent_to (self, email_address, timeout = 300, sondage = 1) :
start_time = time.time()
tandis que ((time.time()-start_time) < timeout) :
# Il est inutile de continuer jusqu'à ce que nous avons sélectionné avec succès
# la boîte de réception. Et si nous ne la sélectionnez à chaque itération
# avant la recherche, nous obtenons des pannes intermittentes.
statut, données = self.imap.select('Inbox')
Si status! = « OK » :
Time.Sleep(Poll)
continuer
statut, data = self.imap.search (None, « TO », email_address)
données = [d d dans les données si d n’est pas None]
Si statut == « OK » et données :
pour num dans reversed(data[0].split()) :
statut, data = self.imap.fetch (num, "(RFC822)")
email_msg = email.message_from_string(data[0][1])
retour email_msg
Time.Sleep(Poll)
soulever des AssertionError ("aucun courriel envoyé à ' %s trouvé dans la boîte de réception"
"après le scrutin pour %s secondes." % (email_address, timeout))
def delete_msgs_sent_to (self, email_address) :
Self.IMAP.Select('Inbox')
statut, data = self.imap.search (None, « TO », email_address)
Si statut == « OK » :
pour num dans reversed(data[0].split()) :
statut, data = self.imap.fetch (num, "(RFC822)")
Self.IMAP.Store (num « + drapeaux », r « \Deleted »)
Self.IMAP.Expunge()
def closedoor() :
gpio.digitalWrite (relay_pin, gpio. HAUTE)
Delay(200)
gpio.digitalWrite (relay_pin, gpio. FAIBLE)
Si __name__ == « __main__ » :
Setup()
while(1) :
Si gpio.digitalRead(sensor_pin) == gpio. BASSE :
Print ("pin capteur est faible")
session = smtplib. SMTP (serveur, port)
session.EHLO()
session.STARTTLS()
session.EHLO
session.Login (sender As Object, mot de passe)
session.sendmail (expéditeur, destinataire, en-têtes + « \r\n\r\n » + corps)
session.Quit()
Delay(10)
avec boîte aux lettres (imap_username, imap_password) comme mbox :
num=mbox.get_Count()
Si num! = 0 :
Si mbox.print_msgs() :
imprimer « allumer »
closedoor()
session = smtplib. SMTP (serveur, port)
session.EHLO()
session.STARTTLS()
session.EHLO
session.Login (sender As Object, mot de passe)
session.sendmail (expéditeur, destinataire, replyheaders + « \r\n\r\n » + replybody)
session.Quit()
Nous pouvons utiliser le truc en poster pour obtenir python library pour pcDuino et laissez le précède python script pour charger automatiquement au démarrage de pcDuino.