Skip to content

A real project for monitoring and controlling the temperature regime in server rooms.

Notifications You must be signed in to change notification settings

ath31st/temp_control_web

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Temperature control (web)

Описание

Легковесный проект для наблюдения и контроля за температурным режимом в серверных помещениях. В данный момент он реально применяется для собственных нужд дежурной смены на моей текущей работе.

Поставленные задачи

  1. Обеспечить круглосуточный контроль за температурой в двух серверных помещениях.
  2. Использовать доступное из имеющегося оборудование. Допускается изготовление из подручных материалов.
  3. Обеспечить своевременное оповещение при возникновении аварий систем охлаждения серверных помещений.
  4. Реализовать наглядный web или gui интерфейс.
  5. Логгировать возникающие события, а так же сохранять текущие показатели температуры в базе данных.

Оценка имеющихся возможностей, средств

В одном из серверных помещений достаточно корректную температуру можно получить только с установленного SNMP-модуля в ИБП. В связи с отсутствием выбора, было принято решение написать парсер страницы веб-интерфейса этого модуля.

В другом помещении корректных и доступных источников для получения температуры не было.

Для оповещения о возникновении аварий был выбран развернутый сервер ip-телефонии asterisk.

Для логгирования событий - легковесная база данных Sqlite.

Ход выполнения

Идея парсить страницу веб-интерфейса SNMP-модуля провалилась из-за довольно сложной системы аутентификации, которая полностью строилась на скриптах, а применять, например, selenium, показалось чрезмерным. Для решения возникшей проблемы пришлось углубиться в SNMP-протокол, найти на сайте производителя модуля информацию об OID (конкретный идентификатор, отвечающий за температуру датчика модуля), подобрать библиотеку для работы с snmp. Затем осталавалось указать номер порта и найденный OID для формирования запроса, который в ответ присылает актуальное значение температуры.

В серверном помещении без доступных датчиков был установлен микроконтроллер arduino с подключенным к нему, через делитель напряжения, датчиком NTC3950 (NTC термистор).

image info

Arduino было подключено к usb-порту сервера, на котором работает само приложение. Здесь замысел был в том, что цикл, описанный в скетче микроконтроллера:

  • каждые 10 секунд оправшивает датчик температуры;
  • преобразует считанное напряжение с помощью библиотеки NTC в градусы, относительно модели датчика;
  • полученное значение передает на COM-порт (на самом деле UART, который так же расположен на плате arduino).

image info

Затем, настроенный планировщик через определенные интервалы считывает данные с виртуального COM-порта. И, как и в случае с первым датчиком, сравнивает полученное значение с установленное в настройках критической отметкой. В случае превышения критических отметок - приложение отправляет команду на asterisk сервер через ssh, для оповещения. Затем статус оповещения датчика переводится в режим - " выключен" на указанный в настройках период (сейчас это 30 минут), чтобы избежать "спама" звонков. Через указанный интервал температура снова сравнивается и если она, по прежнему, превышает допустимую, происходит повторный отправка команды оповещения. Температура измеряется даже в моменты отключения оповещения, в этом случае, если она быстро снижается и становится ниже критической на 5 градусов, то датчик досрочно переводится в режим оповещения "включен".

За оповещение в этом проекте отвечает сервер asterisk 16 версии. Для этого был написан кастомный экстеншн для диалплана, который отправлет вызов на указанный номер телефона и проигрывает указанный аудиофайл (который тоже, в свою очередь был заранее сгенерирован и помещен в папку для кастомных аудиофайлов на сервере asterisk). Было принято решение использовать команды через ssh-туннель, чтобы не тратить время на изучение глубин документации asterisk и его api.

Рассматриваемый, в начале разработки проекта, вариант с gui был отброшен из-за неудобства использования и вынужденного требования разместить приложение на одном из серверов в серверном помещении без доступных датчиков. В итоге был разработан простейший веб-интерфейс с использованием шаблонизатора thymeleaf. Для исключения нежелательного доступа посторонних лиц был использован модуль spring security и несколько заготовленных, вложенных учетных записей для доступа к сервису. Веб-интерфейс обеспечивает доступ к актуальной температуре в серверных помещениях, архиву событий и настройкам приложения. В разделе настроек действует валидация введенных данных, для исключения случае ввода некорректных данных.

Результаты

Поставленные задачи выполнены в полном объеме. Развернутое приложение позволяет получать, по указанному ip-адресу - информацию о датчиках, событиях, изменять настройки.

image info image info image info image info

В автоматическом режиме совершать вызов по указанному телефонному номеру и проигрывать аудиофайл, логгировать, хранить и выводить на веб-интерфейс происшедшие события (сюда входят ежечасные показатели температуры, ошибки, предупреждения).

About

A real project for monitoring and controlling the temperature regime in server rooms.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published