私は自給式の工場で作業していましたが、水タンクが空いているときと満杯のときにメールを送信したいと思います。すべてが機能しますが、条件が満たされたときにのみメール機能をトリガーする条件を設定する必要があります。代わりに、無限に進み、条件が満たされる限り、毎秒電子メールを送信します。一度だけ起こるはずの水タンクは、電子メールを送信し、センサによれば、フルである「水タンク満杯」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
の内側にあるbecuaseにですあなたが絶えず機能を呼び出しているので、明らかに送信を続けます。電子メールを送信するかどうかを決定するために何らかのフラグを追加し、それをクリアしていつ電子メールを再度送信できるかを決定する必要があります。あなたがこれを行うことを選ぶことができる多くの方法があるので、質問は少し広範であるため、あなたはおそらく異なるアイデアを得るでしょうが、実際にあなたの状況に最も効果的なものについて考えるべきです。 – Jmills