我一直致力于一个自动浇水设备,我希望它能够在水箱空着或水箱已满时向我发送电子邮件。一切正常,但我需要能够设置一个条件触发电子邮件功能只有当条件满足。相反,只要条件得到满足,它就会无限地发送并每秒发送一次电子邮件。如何在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