Paso 3: Código de Python
El código de python es como a continuación:#! / usr/bin/python
#-*-codificación: utf-8-*-
Import smtplib
tiempo de importación
de adc import analog_read
importación de gpio
tiempo de importación
importación imaplib
importar uuid
de correo electrónico de importación de correo electrónico
importación imaplib
tiempo de importación
importar uuid
de correo electrónico de importación de correo electrónico
relay_pin = "gpio2"
sensor_pin = "gpio4"
#the siguiente es para el envío de correo electrónico
servidor = 'smtp.gmail.com'
Puerto = 587
remitente = ' xxxxxx
destinatario = "xxxxx
contraseña = 'xxxxx'
tema = 'Garaje puerta abierta'
cuerpo = "la puerta está abierta. Compruebe por favor '
#the siguiente es para la recepción de correo electrónico
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)
setup() Def:
gpio.pinMode (relay_pin, gpio. SALIDA)
gpio.pinMode (sensor_pin, gpio. ENTRADA)
gpio.digitalWrite (relay_pin, gpio. BAJO)
cuerpo = "" + cuerpo + ""
cabeceras = ["desde:" + emisor,
"Tema:" + tema,
"Para:" + receptor,
"MIME-Version: 1.0",
"Tipo de contenido: texto/html"]
headers = "\r\n".join(headers)
replysubject = 'Cerré la puerta de garaje'
replybody = 'Cerré la puerta de garaje'.
replybody = "" + replybody + ""
replyheaders = ["desde:" + emisor,
"Tema:" + replysubject,
"Para:" + receptor,
"MIME-Version: 1.0",
"Tipo de contenido: texto/html"]
replyheaders = "\r\n".join(replyheaders)
clase MailBox(object):
DEF __init__ (self, usuario, contraseña):
Self.User = usuario
Self.password = contraseña
Si IMAP_USE_SSL:
Self.IMAP = el imaplib. IMAP4_SSL(IMAP_SERVER, IMAP_PORT)
otra cosa:
Self.IMAP = el imaplib. IMAP4(IMAP_SERVER, IMAP_PORT)
DEF __enter__(self):
Self.IMAP.login (self.user, self.password)
volver a uno mismo
DEF __exit__ (auto, tipo, valor, rastreo):
Self.IMAP.Close()
Self.IMAP.logout()
DEF get_count(self):
Self.IMAP.Select('Inbox')
Estado, datos = self.imap.search (ninguna, 'Oculto')
devolver la suma (1 para el num de data[0].split())
DEF fetch_message (self, num):
Self.IMAP.Select('Inbox')
Estado, datos = self.imap.fetch(str(num), "(RFC822)")
email_msg = email.message_from_string(data[0][1])
volver email_msg
DEF delete_message (self, num):
Self.IMAP.Select('Inbox')
Self.IMAP.Store (num, '+ banderas', r '\Deleted')
Self.IMAP.Expunge()
DEF print_msgs(self):
Self.IMAP.Select('Inbox')
Estado, datos = self.imap.search (ninguna, 'Oculto')
número de #for en reversed(data[0].split()):
Estado, datos = self.imap.fetch (num, "(RFC822)")
Self.IMAP.Store (num, '+ banderas', '\\Deleted')
MSG=email.message_from_string(Data[0][1])
message_content=msg.get_all("Subject")
Si 'estrecha puerta' en message_content:
retorno 1
DEF get_latest_email_sent_to (self, email_address, tiempo de espera = 300, encuesta = 1):
start_time = time.time()
mientras que ((time.time()-start_time) < timeout):
# Es inutil continuar hasta que con éxito hemos seleccionado
# la bandeja de entrada. Y si no lo seleccionamos en cada iteración
# antes de buscar, tenemos fallas intermitentes.
Estado, datos = self.imap.select('Inbox')
Si status! = 'Aceptar':
Time.Sleep(poll)
continuar
Estado, datos = self.imap.search (ninguna, 'A', email_address)
datos = [d d datos si d no es ninguna]
Si estado == 'OK' y datos:
para num en reversed(data[0].split()):
Estado, datos = self.imap.fetch (num, "(RFC822)")
email_msg = email.message_from_string(data[0][1])
volver email_msg
Time.Sleep(poll)
elevar AssertionError ("sin correo electrónico enviado a ' %s' encuentra en bandeja de entrada"
"después de la interrogación para %s segundos." % (email_address, tiempo de espera))
DEF delete_msgs_sent_to (self, email_address):
Self.IMAP.Select('Inbox')
Estado, datos = self.imap.search (ninguna, 'A', email_address)
Si estado == 'OK':
para num en reversed(data[0].split()):
Estado, datos = self.imap.fetch (num, "(RFC822)")
Self.IMAP.Store (num, '+ banderas', r '\Deleted')
Self.IMAP.Expunge()
DEF closedoor():
gpio.digitalWrite (relay_pin, gpio. ALTA)
Delay(200)
gpio.digitalWrite (relay_pin, gpio. BAJO)
Si __name__ == '__main__':
Setup()
while(1):
Si gpio.digitalRead(sensor_pin) == gpio. BAJO:
Imprimir ("pin Sensor bajo")
sesión = smtplib. SMTP (servidor, puerto)
Session.EHLO()
Session.STARTTLS()
Session.EHLO
Session.login (sender, contraseña)
Session.sendmail (remitente, destinatario, cabeceras + cuerpo + "\r\n\r\n")
Session.Quit()
Delay(10)
con buzón de correo (imap_username, imap_password) como mbox:
Num=mbox.get_Count()
Si num! = 0:
Si mbox.print_msgs():
imprimir 'encender'
closedoor()
sesión = smtplib. SMTP (servidor, puerto)
Session.EHLO()
Session.STARTTLS()
Session.EHLO
Session.login (sender, contraseña)
Session.sendmail (remitente, destinatario, replyheaders + "\r\n\r\n" + replybody)
Session.Quit()
Podemos utilizar el truco de post para obtener python library para pcDuino y deje el anterior python script para cargar automáticamente durante el inicio de pcDuino.