我一直致力於一個自動澆水設備,我希望它能夠在水箱空着或水箱已滿時向我發送電子郵件。一切正常,但我需要能夠設置一個條件觸發電子郵件功能只有當條件滿足。相反,只要條件得到滿足,它就會無限地發送並每秒發送一次電子郵件。如何在Python中滿足某些條件時觸發函數
對於例如:水箱根據傳感器已滿,請發送電子郵件「水箱滿」
水箱根據傳感器是空的,請發送電子郵件「水箱爲空」
這應該只發生一次除非水位改變。
只有滿足不同的條件,才能做任何事情。因此,只要有水,循環就會永遠持續下去,不會觸發任何條件。
一旦沒有水,那麼情況就會觸發。同樣的,當沒有水,然後我斟滿
下面是代碼:
import RPi.GPIO as GPIO, feedparser
from time import sleep
import smtplib, os, sys
from email.mime.text import MIMEText
from email.MIMEMultipart import MIMEMultipart
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
#Set up GPIO Inputs
# Yellow Input
GPIO.setup(2, GPIO.IN)
def send_email(msg):
USERNAME = "[email protected]"
PASSWORD = "my_email_password"
MAILTO "recipient email"
msg['From'] = USERNAME
msg['To'] = MAILTO
server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo_or_helo_if_needed()
server.starttls()
server.ehlo_or_helo_if_needed()
server.login(USERNAME, PASSWORD)
server.sendmail(USERNAME, MAILTO, msg.as_string())
server.quit()
print "Email sent to: "+ MAILTO
return
def Send_nowater_email():
print"No water"
msg = MIMEMultipart()
msg.attach(MIMEText('Water tank empty'))
msg['Subject'] = 'Plant notification'
send_email(msg)
return
def Send_watered_email():
msg = MIMEMultipart()
msg.attach(MIMEText('Water tank full'))
msg['Subject'] = 'Plant notification'
send_email(msg)
return
while True:
Input_yellow = GPIO.input(2)
print Input_yellow
if Input_yellow == False:
Send_watered_email()
if Input_yellow == True:
Send_nowater_email()
這是監守您的電子郵件()函數內的',而(真)'循環 – martianwars
如果不追蹤某種狀態,表示如果電子郵件已/應發,由於您不斷地調用該函數,它顯然會繼續發送。您需要添加某種標誌來確定是否應該發送電子郵件,然後決定何時以及是否要清除它,以便可以再次發送電子郵件。這個問題有點寬泛,因爲有很多方法可以選擇這樣做,所以你可能會得到不同的想法,但是你應該考慮一下最適合你的情況。 – Jmills