Smart Garage drivs av pcDuino (3 / 4 steg)
Steg 3: Python Code
Python-koden är som nedan:#! / usr/bin/python
#-*-kodning: utf-8-*-
importera smtplib
Importera tid
importera analog_read från adc
importera gpio
Importera tid
importera imaplib
importera uuid
från e-post importera e-post
importera imaplib
Importera tid
importera uuid
från e-post importera e-post
relay_pin = "gpio2"
sensor_pin = "gpio4"
#the följande är för att skicka e-post
Server = "smtp.gmail.com"
port = 587
avsändaren = "xxxxxx
mottagaren = ' xxxxx
lösenord = "xxxxx"
angående = "Garage dörren öppnas"
Body = "garagedörren är öppen. Kontrollera '
#the följande är för att ta emot e-post
IMAP_SERVER = "imap.gmail.com"
IMAP_PORT = "993"
IMAP_USE_SSL = sant
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. OUTPUT)
gpio.pinMode (sensor_pin, gpio. INGÅNG)
gpio.digitalWrite (relay_pin, gpio. LÅG)
Body = "" + kroppen + ""
headers = ["från:" + sender,
"Ämne:" + ämne,
"Till:" + mottagare,
"MIME-Version: 1.0",
"Content-Type: text/html"]
headers = "\r\n".join(headers)
replysubject = "Jag stängd garageport"
replybody = "Jag stängd garageport."
replybody = "" + replybody + ""
replyheaders = ["från:" + sender,
"Ämne:" + replysubject,
"Till:" + mottagare,
"MIME-Version: 1.0",
"Content-Type: text/html"]
replyheaders = "\r\n".join(replyheaders)
klass MailBox(object):
def __init__ (själv, användare, lösenord):
Self.User = användare
Self.password = lösenord
om IMAP_USE_SSL:
Self.IMAP = imaplib. IMAP4_SSL(IMAP_SERVER, IMAP_PORT)
annat:
Self.IMAP = imaplib. IMAP4(IMAP_SERVER, IMAP_PORT)
def __enter__(self):
Self.IMAP.Login (self.user, self.password)
gå tillbaka själv
def __exit__ (själv typ, värde, traceback):
Self.IMAP.Close()
Self.IMAP.logout()
def get_count(self):
Self.IMAP.Select('Inbox')
status, data = self.imap.search (ingen, "Osynliga")
returnera summan (1 för num i data[0].split())
def fetch_message (self, num):
Self.IMAP.Select('Inbox')
status, data = self.imap.fetch(str(num), "(RFC822)")
email_msg = email.message_from_string(data[0][1])
återgå email_msg
def delete_message (self, num):
Self.IMAP.Select('Inbox')
Self.IMAP.Store (num, "+ flaggor", r '\Deleted')
Self.IMAP.expunge()
def print_msgs(self):
Self.IMAP.Select('Inbox')
status, data = self.imap.search (ingen, "Osynliga")
#for num i reversed(data[0].split()):
status, data = self.imap.fetch (num, "(RFC822)")
Self.IMAP.Store (num, "+ flaggor", "\\Deleted")
MSG=email.message_from_string(data[0][1])
message_content=MSG.get_all("subject")
om nära garageport i message_content:
returnera 1
def get_latest_email_sent_to (self, email_address, timeout = 300, poll = 1):
start_time = time.time()
medan ((time.time()-start_time) < timeout):
# Det är ingen idé att fortsätta tills vi framgångsrikt har valt
# Inkorgen. Och om vi inte väljer det för varje iteration
# innan du söker, vi får återkommande misslyckanden.
status, data = self.imap.select('Inbox')
om status! = "OK":
Time.Sleep(Poll)
fortsätta
status, data = self.imap.search (ingen "Till", email_address)
data = [d för d i data om d inte är ingen]
om status == 'OK' och data:
för num i reversed(data[0].split()):
status, data = self.imap.fetch (num, "(RFC822)")
email_msg = email.message_from_string(data[0][1])
återgå email_msg
Time.Sleep(Poll)
höja AssertionError ("ingen e-post skickas till ' %s' finns i Inkorgen"
"efter röstningen för %s sekunder." % (email_address, timeout))
def delete_msgs_sent_to (self, email_address):
Self.IMAP.Select('Inbox')
status, data = self.imap.search (ingen "Till", email_address)
om status == "OK":
för num i reversed(data[0].split()):
status, data = self.imap.fetch (num, "(RFC822)")
Self.IMAP.Store (num, "+ flaggor", r '\Deleted')
Self.IMAP.expunge()
def closedoor():
gpio.digitalWrite (relay_pin, gpio. HÖG)
Delay(200)
gpio.digitalWrite (relay_pin, gpio. LÅG)
om __name__ == "__main__":
Setup()
While(1):
om gpio.digitalRead(sensor_pin) == gpio. LÅG:
skriva ut ("givarstaven är låg")
session = smtplib. SMTP (server, port)
session.EHLO()
session.starttls()
session.EHLO
session.Login (avsändare, lösenord)
session.sendmail (avsändare, mottagare, headers + "\r\n\r\n" + kropp)
session.quit()
Delay(10)
med postlåda (imap_username, imap_password) som mbox:
NUM=mbox.get_Count()
om num! = 0:
om mbox.print_msgs():
Print "lägga på"
closedoor()
session = smtplib. SMTP (server, port)
session.EHLO()
session.starttls()
session.EHLO
session.Login (avsändare, lösenord)
session.sendmail (avsändare, mottagare, replyheaders + "\r\n\r\n" + replybody)
session.quit()
Vi kan använda tricken i post för att få python-bibliotek för pcDuino, och låt de ovan python skript för att läsas in automatiskt vid start av pcDuino.