#bash #raspberry-pi
#bash #raspberry-pi
Вопрос:
Я пишу сценарий оболочки (#!/bin / sh) для моего RPI, который отправляет электронные письма всякий раз, когда датчик измеряет значение выше определенного градуса Цельсия.
Поскольку датчики срабатывают каждую минуту для ведения журнала, температура выше 30 градусов в течение примерно часа разрешилась бы за 60 сообщений электронной почты, чего я не хочу.
Есть ли способ установить время восстановления для команды, которая отправляет почту?
Вот код, который проверяет данные датчика и отправляет почту, если температура выше 30 градусов (это решается с помощью функций, но я думаю, что это не имеет значения):
if [ $tempC -ge 40 ]
then
#logging code
mailSend "WARNING: Temperature is currently: $temp and Humidity is: ${file#"sensor_dhtH"}" #This command needs a cooldown
elif [ $tempC -ge 30 ]
then
#logging code
mailSend "Attention: Temperature is currently: $temp and Humidity is: ${file#"sensor_dhtH"}" #This command needs a cooldown
else
#logging code
fi
Заранее спасибо 🙂
Комментарии:
1. Просто. Всякий раз, когда вы действительно отправляете письмо, сохраняйте переменную, записывающую время последнего письма, например,
tolm=$SECONDS
Затем, всякий раз, когда вы собираетесь отправить новое письмо, вычисляйте((elapsed=SECONDS-tolm))
и не отправляйте его, еслиelapsed
оно не превышает некоторого порога.
Ответ №1:
Хорошо, благодаря @Mark Setchell я смог найти это решение:
limit=$((2*60*60)) #limit is 2 hours
if [ $SECONDS -ge $limit ] #if seconds-since-last-send greater or equal to your-set-limit(here 2h)
then
#send the mail
SECONDS=0 #set the seconds-since-last-send to 0
else
echo "not yet ma man, wait some seconds" #not sending the mail cuz its too early to send another
fi
Я раньше не знал о переменной $ SECONDS, которая сама себя подсчитывает, так что это, безусловно, было полезно, спасибо 🙂
Комментарии:
1. $ SECONDS существует только в bash, поэтому, если у кого-то есть решение, которое также работает в sh, это было бы здорово!