Stap 3: Python Code
De python code is als hieronder:#! / usr/bin/python
#-*-codering: utf-8-*-
smtplib importeren
importeren
importeren van adc analog_read
gpio importeren
importeren
imaplib importeren
importeren van uuid
van e-mail e-mail importeren
imaplib importeren
importeren
importeren van uuid
van e-mail e-mail importeren
relay_pin = "gpio2"
sensor_pin = "gpio4"
#the volgt voor het verzenden van e-mail
Server = 'smtp.gmail.com'
poort 587 =
afzender = ' xxxxxx
ontvanger = ' xxxxx
wachtwoord = 'xxxxx'
onderwerp = 'Garage deur geopend'
lichaam = ' de garagedeur is open. Gelieve te controleren '
#the volgende is voor het ontvangen van 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. UITVOER)
gpio.pinMode (sensor_pin, gpio. INGANG)
gpio.digitalWrite (relay_pin, gpio. LAAG)
lichaam = "" + lichaam + ""
koptekst = ["van:" + afzender,
"Onderwerp:" + onderwerp,
"Naar:" + ontvanger,
"MIME-Version: 1.0",
"Content-Type: text/html"]
headers = "\r\n".join(headers)
replysubject = 'Ik gesloten garagedeur'
replybody = 'Ik gesloten garagedeur.'
replybody = "" + replybody + ""
replyheaders = ["van:" + afzender,
"Onderwerp:" + replysubject,
"Naar:" + ontvanger,
"MIME-Version: 1.0",
"Content-Type: text/html"]
replyheaders = "\r\n".join(replyheaders)
klasse MailBox(object):
def __init__ (zelf, gebruiker, wachtwoord):
Self.user = gebruiker
Self.password = wachtwoord
Als IMAP_USE_SSL:
Self.IMAP = imaplib. IMAP4_SSL(IMAP_SERVER, IMAP_PORT)
anders:
Self.IMAP = imaplib. IMAP4(IMAP_SERVER, IMAP_PORT)
def __enter__(self):
Self.IMAP.login (self.user, self.password)
keren zelf
def __exit__ (zelf, type, waarde, traceback):
Self.IMAP.Close()
Self.IMAP.logout()
def get_count(self):
Self.IMAP.Select('Inbox')
status, gegevens = self.imap.search (geen, 'Onzichtbare')
som (1 voor num in data[0].split()) retourneren
def fetch_message (self, num):
Self.IMAP.Select('Inbox')
status, gegevens = self.imap.fetch(str(num), '(RFC822)')
email_msg = email.message_from_string(data[0][1])
email_msg retourneren
def delete_message (self, num):
Self.IMAP.Select('Inbox')
Self.IMAP.Store (num, '+ vlaggen', r '\Deleted')
Self.IMAP.Expunge()
def print_msgs(self):
Self.IMAP.Select('Inbox')
status, gegevens = self.imap.search (geen, 'Onzichtbare')
#for num in reversed(data[0].split()):
status, gegevens = self.imap.fetch (num, '(RFC822)')
Self.IMAP.Store (num, '+ vlaggen', '\\Deleted')
msg=email.message_from_string(data[0][1])
message_content=msg.get_all("subject")
als 'nauwe garagedeur' in message_content:
return 1
def get_latest_email_sent_to (zelf email_address, timeout = 300, poll = 1):
start_time = time.time()
terwijl ((time.time()-start_time) < timeout):
# Het is geen gebruik blijven totdat we met succes hebt geselecteerd
# het postvak in. En als we niet het selecteren op elke iteratie
# voor het zoeken, we krijgen intermitterende mislukkingen.
status, gegevens = self.imap.select('Inbox')
als status! = 'OK':
time.Sleep(poll)
blijven
status, gegevens = self.imap.search (geen, 'TO', email_address)
gegevens = [d voor d in gegevens als d niet geen]
als status == 'OK' en gegevens:
voor num in reversed(data[0].split()):
status, gegevens = self.imap.fetch (num, '(RFC822)')
email_msg = email.message_from_string(data[0][1])
email_msg retourneren
time.Sleep(poll)
verhogen van AssertionError ("geen e-mail gestuurd naar ' %s gevonden in Postvak in"
"na de polling voor %s seconden." % (email_address timeout))
def delete_msgs_sent_to (self, email_address):
Self.IMAP.Select('Inbox')
status, gegevens = self.imap.search (geen, 'TO', email_address)
als status == 'OK':
voor num in reversed(data[0].split()):
status, gegevens = self.imap.fetch (num, '(RFC822)')
Self.IMAP.Store (num, '+ vlaggen', r '\Deleted')
Self.IMAP.Expunge()
def closedoor():
gpio.digitalWrite (relay_pin, gpio. HOOG)
delay(200)
gpio.digitalWrite (relay_pin, gpio. LAAG)
Als __name__ == '__main__':
Setup
while(1):
Als gpio.digitalRead(sensor_pin) == gpio. LAAG:
afdrukken ("pin van de Sensor is LOW")
sessie = smtplib. SMTP (server, poort)
Session.EHLO()
Session.starttls()
Session.EHLO
Session.login (afzender, wachtwoord)
Session.sendmail (afzender, ontvanger, headers "\r\n\r\n" + lichaam)
Session.Quit()
delay(10)
met de postbus (imap_username, imap_password) als mbox:
num=mbox.get_Count()
Als num! = 0:
als mbox.print_msgs():
afdrukken 'inschakelen'
closedoor()
sessie = smtplib. SMTP (server, poort)
Session.EHLO()
Session.starttls()
Session.EHLO
Session.login (afzender, wachtwoord)
Session.sendmail (afzender, ontvanger, replyheaders "\r\n\r\n" + replybody)
Session.Quit()
We kunnen de truc gebruiken in post te krijgen python bibliotheek voor pcDuino, en laat de bovenstaande python script om het automatisch te laden tijdens het opstarten van pcDuino.