Разрабатываю приложение на raspberry pi с сенсором H C -SR01. На данный момент у меня есть сценарий python, который проверяет уровень воды каждую секунду.
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO_TRIGGER = 16
GPIO_ECHO = 18
GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
GPIO.setup(GPIO_ECHO, GPIO.IN)
def distance():
# set Trigger High
GPIO.output(GPIO_TRIGGER, True)
# set Trigger after 0.1ms low
time.sleep(0.00001)
GPIO.output(GPIO_TRIGGER, False)
startTime = time.time()
endTime = time.time()
# store start time
while GPIO.input(GPIO_ECHO) == 0:
startTime = time.time()
# store arrival
while GPIO.input(GPIO_ECHO) == 1:
endTime = time.time()
# elapsed time
TimeElapsed = endTime - startTime
# multiply with speed of sound (34300 cm/s)
# and division by two
distance = (TimeElapsed * 34300) / 2
return distance
while True:
dist = distance()
print ("Entfernung = %.1f cm" % dist)
time.sleep(1)
Это работает нормально, и теперь я хочу отправить себе электронное письмо, когда уровень воды превышает определенный предел. Проблема не в отправке электронного письма, а в логике c, когда его отправлять. Если я помещу функцию sendEmail () в while l oop, я буду получать электронную почту каждую секунду, когда будет достигнут уровень воды. Таким образом, следующее не сработает:
#global varaible
alarm_waterlevel = 170
#in while loop
if dist > alarm_waterlevel
sendMail()
Итак, я ищу умное решение, чтобы отправлять почту только при достижении уровня воды.
Я думал о глобальная переменная и проверьте, упал ли уровень воды ниже определенной точки, прежде чем снова запускать почту. Примерно так:
#global varaible
alarm_waterlevel = 170
mail_sent = false
#in while loop
if dist >= alarm_waterlevel && mail_sent == false
sendMail()
mail_sent = true
if dist <= alarm_waterlevel - 10
mail_sent = false
Как вы думаете, это отказоустойчивое решение? Есть ли какие-нибудь полезные советы, которые помогут мне решить эту проблему?