Оглавление:

Контролируемый мониторинг температуры в помещении Raspberry Pi с выводом изображений Gnuplot и возможностью отправки уведомлений по электронной почте: 7 шагов
Контролируемый мониторинг температуры в помещении Raspberry Pi с выводом изображений Gnuplot и возможностью отправки уведомлений по электронной почте: 7 шагов

Видео: Контролируемый мониторинг температуры в помещении Raspberry Pi с выводом изображений Gnuplot и возможностью отправки уведомлений по электронной почте: 7 шагов

Видео: Контролируемый мониторинг температуры в помещении Raspberry Pi с выводом изображений Gnuplot и возможностью отправки уведомлений по электронной почте: 7 шагов
Видео: Высокая плотность 2022 2024, Июнь
Anonim
Контролируемый мониторинг температуры в помещении Raspberry Pi с выводом изображений Gnuplot и возможностью отправки уведомлений по электронной почте
Контролируемый мониторинг температуры в помещении Raspberry Pi с выводом изображений Gnuplot и возможностью отправки уведомлений по электронной почте

Там, где я работаю, есть очень важная комната, в которой много компьютеров. Окружающая температура в этом помещении должна быть очень низкой, чтобы оптимизировать работу этих систем. Меня попросили придумать систему мониторинга, которая способна отправлять некоторую форму предупреждений нескольким людям, которые будут уведомлять их о том, что что-то не так с кондиционером в этой комнате. Аппаратное обеспечение для этой сборки я использовал Raspberry pi и USB-датчик температуры и влажности. Для мониторинга я использовал Gnuplot, чтобы построить три графика температуры и создать изображение этих графиков. Затем я создал специальную HTML-страницу, которая будет размещена на Raspberry pi, чтобы текущие условия, эти выходные изображения gnuplot, можно было отслеживать с веб-страницы в нашей сети. Для оповещения я решил использовать Gmail. Я нашел пример кода в журнале пользователей Linux. (Конечно, вы можете использовать любой почтовый сервер, если знаете необходимые назначения портов.) Для этого я создал специальную учетную запись электронной почты Gmail для этих предупреждений. Кроме того, в качестве дополнительной функции при срабатывании предупреждения я прикрепляю к электронному письму один график, чтобы человек, получающий электронное письмо, мог понять, насколько резким было увеличение, вызвавшее предупреждение.

Шаг 1. Настройка оборудования

Настройка оборудования
Настройка оборудования

Не так уж много нужно настраивать оборудование. Raspberry pi работает под управлением Raspian, и датчик температуры USB просто подключается непосредственно к одному из портов USB. Энергопотребление этого датчика минимально, поэтому я запитал его напрямую от Raspberry pi. Однако для устройств с питанием от USB с немного большим энергопотреблением я бы порекомендовал подключать их через USB-концентратор с питанием, а не напрямую от USB-порта Raspberry pi. Как только датчик температуры включен, он предоставляет последовательную строку, которая содержит температуру и показания влажности в текущих условиях. температура = 20,9 ° C влажность = 62,7% точка росы = 13,0 ° Сценарий Python CA анализирует эту строку и каждые пять минут сохраняет значения температуры и влажности в трех текстовых файлах; ежедневные, 24- и 48-часовые текстовые файлы (различия будут обсуждаться позже в разделе HTML). Из этих файлов Gnuplot будет генерировать графики, а затем изображения набора данных в каждом файле. Прежде чем обсуждать скрипт на Python, я расскажу о подготовке Raspberry pi. Поскольку мониторинг должен осуществляться в режиме онлайн, необходимо установить веб-сервер. Я пробовал несколько из них в свое время на Raspberry pi, но, хотя он немного велик, я предпочитаю Apache. Чтобы установить Apache на свой Raspberry pi, вы просто набираете: sudo apt-get install apache2 Он выдаст вам приглашение перед установкой, нажмите «y» для подтверждения, и Apache будет установлен через несколько минут в зависимости от вашего Raspberry pi. готово, вам необходимо установить два подключаемых модуля python: python-serial и подключаемый модуль python-gnuplot. (Хотя я понял, что последние сборки Raspian имеют стандарт подключаемого модуля python-serial, но на всякий случай.) Чтобы установить те, которые вы набираете: sudo apt-get install python-serial python-gnuplot Еще раз после подтверждения запросов эти подключаемые -ins будут установлены. На этом настройка оборудования завершена.

Шаг 2. Настройка программного обеспечения - настройка электронной почты и получатели

создать адрес электронной почты Прежде чем мы углубимся в программное обеспечение, сейчас самое время создать учетную запись Gmail, с которой будут отправляться оповещения по электронной почте. (В этом примере используется GMail, но можно использовать любой почтовый сервер, если мы знаем настройки порта smtp). Код Python довольно прост, но необходимый импорт имеет решающее значение. Без них ничего не работало бы. From time import * import time import serial import smtplib import Gnuplot import os import sys Наконец, список рассылки. Конечно, мы должны добавить получателей электронного письма. Каждый адрес электронной почты сохраняется в переменной. From_address ='[email protected]'to_address1 = 'recipient1.mail.com' to_address2 = 'recipient2.mail.com'username =' [email protected] 'password =' custom_email_password '

Шаг 3: Настройка программного обеспечения - Настройка и анализ последовательного порта

Затем мы рассмотрим настройку последовательного интерфейса - это просто вопрос настройки параметров, которые соответствуют последовательному выходу датчика. Датчик выдает последовательную строку 9600 8 N 1, которая является стандартным форматом. После того, как строка была получена, есть несколько способов разобрать эту строку в python и, возможно, более надежно. Я ищу "временные" символы в последовательной строке. После нахождения достаточно просто прочитать следующие 46 последовательных символов в строке. Теперь к собранной строке можно обращаться как к элементам массива. Требуемые данные извлекаются из строки и сохраняются в трех файлах вместе с соответствующей меткой времени. Timestamp = strftime ("% d% b% Y% H:% M:% S", localtime ())

Шаг 4: Настройка программного обеспечения - Gnuplot

Настройка программного обеспечения - Gnuplot
Настройка программного обеспечения - Gnuplot
Настройка программного обеспечения - Gnuplot
Настройка программного обеспечения - Gnuplot
Настройка программного обеспечения - Gnuplot
Настройка программного обеспечения - Gnuplot

Gnuplot - это графический инструмент командной строки. После того, как вы разобрались с основами, это может быть довольно мощный инструмент для графического отображения наборов данных. Gnuplot может строить график непосредственно из форматированного текстового файла, и у нас, так уж получилось, есть один из предыдущих шагов синтаксического анализа. Как только мы укажем gnuplot, где в файле находятся данные, мы можем построить желаемые значения. Я собираюсь использовать время по оси X и нашу температуру по оси Y. По моему опыту, график времени является самым сложным, поскольку вам нужно получить формат времени в gnuplot, чтобы он соответствовал формату текстового файла. После того, как все параметры построения графика будут завершены и в соответствии с вашими предпочтениями, Gnuplot может затем создать изображение этого графика. Это будет изображение, которое мы будем использовать на нашей веб-странице позже. Я решил использовать изображение.png, и, поскольку я хочу заменить старое изображение на веб-странице, каждое изображение имеет одно и то же имя, поэтому эту строку кода не нужно менять. Настройка размера изображения связана с оптимизацией HTML-страницы. Сначала я поигрался со стандартными размерами, а затем поэкспериментировал, чтобы изображение соответствовало моему экрану. В этом проекте я не храню старые изображения, поэтому физический размер файла в хранилище не является важным фактором для драгоценного хранилища Raspberry pi. Вот фрагмент кода для создания и хранения графика daily-p.webp

Шаг 5: Настройка программного обеспечения - установка пороговых значений и отправка по электронной почте

Пороговое значение для предупреждения должно определяться методом проб и ошибок для вашей настройки. В комнате, в которой находится система, нет окон, поэтому после выключения кондиционирования воздуха может очень быстро стать очень жарко. Первоначально я смотрел набор данных в течение нескольких дней и наблюдал за изменениями температуры, прежде чем я выбрал значение предупреждения 30 градусов по Цельсию. Оно установлено как переменная в скрипте python. Это может показаться не очень высоким, но после срабатывания предупреждения вы все равно хотите дать себе время исправить проблему, прежде чем она станет критической.

Для простоты я отправляю отдельные электронные письма в список рассылки. Поскольку список рассылки короткий, я никогда не утруждал себя отправкой одного письма нескольким получателям. Здесь следует отметить одну вещь: поскольку я запускаю этот скрипт как задание cron каждые 5 минут, вы не хотите отправлять электронные письма каждые 5 минут после срабатывания порога. Чтобы обойти это, я записываю дату и время предупреждения в файл и проверяю этот файл перед отправкой электронных писем, чтобы узнать, находится ли система уже в состоянии предупреждения. Находясь в состоянии предупреждения, он будет повторно отправлять электронное письмо только каждый час после первого триггера, пока система находится в состоянии предупреждения. Таким образом, Gmail не блокирует вашу электронную почту от отправки слишком большого количества писем за короткий период времени.

Шаг 6. Настройка программного обеспечения - HTML

Мониторинг всей системы осуществляется через веб-страницу, и для этого необходим очень простой html-скрипт. Для изображений, созданных Gnuplot, я просто использую те же размеры изображения. Я считаю, что выбрал для этих изображений примерно 3 размера, которые лучше всего подходят для моего экрана. Прежде чем мы создадим html-скрипт, давайте создадим для него папку. По умолчанию папка веб-хостинга находится в / var / www /. Хотя единственная цель этого Raspberry pi - следить за этой комнатой и отправлять оповещения по электронной почте, для удобства я создал отдельную папку в папке / var / www /. Поскольку эта папка принадлежит пользователю root, вы должны использовать sudo для создания папки в этом месте. sudo mkdir / var / www / temperature В этом примере я использовал температуру в качестве имени папки, но вы можете использовать здесь любое имя, но помните, что для просмотра этой страницы его нужно будет ввести в адресную строку. Этот путь хранится в переменной в скрипте python. Даже если необходимо изменить расположение хостинга или сценарий для другой системы, его можно просто изменить из этого места. Теперь мы можем создать наш html-сценарий в этой папке, не забывая использовать sudo перед любыми командами, которые вы хочу казнить здесь. Я бы порекомендовал вам назвать html-скрипт index.html, так как это упростит поиск этой страницы. Важно убедиться, что размер изображения совпадает с размером изображения из Gnuplot. Для просмотра этой страницы, вам просто нужно ввести IP-адрес Raspberry Pi, за которым следует / temperature (или как вы называете свою папку). У меня есть несколько работающих систем, отслеживающих разные вещи, и все они производят некоторый графический вывод своих результатов. Итак, я создал страницу со ссылками на все эти страницы, поэтому мне не нужно беспокоиться о вводе адреса каждый раз, когда я хочу получить доступ к этим страницам.

Шаг 7: Я жив…

Я использовал это, чтобы контролировать температуру в компьютерном зале, но это могло быть довольно много данных из любого источника. Как только он может быть сохранен в текстовом файле и вы знаете его формат, Gnuplot сможет сделать все остальное. Одна вещь, которую я недавно добавил в этот проект, - это отправка своего рода «сердцебиения» по электронной почте. То есть первого числа месяца в 9 утра у меня есть скрипт, который запускает рассылку по электронной почте, чтобы сообщить им, что система работает должным образом, и все в порядке.

Использование списка cronjob как:

Рекомендуемые: