Не всё так просто. Считаю программу уже сложной, поэтому и подход к реализации должен быть более серьёзным, а не просто копипаст из инета.
Дано:- значение температуры (целое)
- допустимое значение нижней границы температуры (целое)
- допустимое значение верхней границы температуры (целое)
- запуск программы проверки раз в 5 минут
Исходя из топика, формулирую
задачу:
Если значение температуры выходит за пределы допустимых значений,
то в первый раз произвести SMS-уведомление,
и если состояние сохраняется,
то оповещать каждые 20 минут до тех пор, пока температура не войдёт в диапазон.
Считаю задачу не совсем корректной и вот по какой причине:
Если это не круглосуточное предприятие,
и нет критической важности, предположим, что выход за пределы произошёл ночью, или, например, датчик неисправен,
то зачем будить человека посреди ночи? Уведомление о выходе за пределы должно прийти максимум два раза (первый - на тот случай, если что не сработает), далее нужно уведомление о входе в норму. Больше ничего не нужно. Однако, возможна ситуация, что график температуры будет достаточно пологий на границе между допустимым значением и превышением. Тогда наблюдатель просто устанет от смс`ок. Этот вопрос должен быть продуман и реализован. Например, сделать возможность, чтобы наблюдатель вручную мог отключать оповещение - т.е. подтвердить получение сообщение.
Теперь конкретно по задаче топика. Диаграмы, поясняющие работу системы примерно будут такие:
[attach=1]
Здесь я, на будущее ввёл 3 типа СМС.
Алгоритм работы.[attach=2]
Задача реализована на основе сохранения состояния счётчика "молчания" - если происходит выход за пределы, запускается смс-оповещение и происходит декремент счётчика. Однако последующие запуски производят только декремент, без отправки смс. Когда счётчик обнулился, снова происходит отправка, и счётчик взводится в количество 5-минутных интервалов и процесс повторяется.
Если всё приходит в норму, счётчик обнуляется принудительно.
Инициализация[attach=3]
После включения системы и загрузки ОС, нужно создать фаловый раздел в памяти и примонтировать его как каталог, например в /tmpfs . В этом каталоге создать файлы счётчиков и сразу поместить в них по нулю.
В процессе работы скрипта, он будет считывать из него значения и обновлять их. Раздел в памяти применён для сохранения ресурса накопителя.
Стоит также учитывать, что cron может запустить задание раньше, чем rc.local и не обнаружить файлов, поэтому процедура их создания также предусмотрена в алгоритме.
Вот, когда алгоритм проверен, отлажен и отработан на бумажке и в голове, можно взять клавиатуру в руки.
