Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ath31st/temp_control_web
A real project for monitoring and controlling the temperature regime in server rooms.
https://github.com/ath31st/temp_control_web
scheduler snmp spring-boot sqlite ssh thymeleaf web
Last synced: 12 days ago
JSON representation
A real project for monitoring and controlling the temperature regime in server rooms.
- Host: GitHub
- URL: https://github.com/ath31st/temp_control_web
- Owner: ath31st
- Created: 2023-01-17T12:42:34.000Z (about 2 years ago)
- Default Branch: master
- Last Pushed: 2023-02-27T12:17:44.000Z (almost 2 years ago)
- Last Synced: 2024-11-13T21:25:21.493Z (2 months ago)
- Topics: scheduler, snmp, spring-boot, sqlite, ssh, thymeleaf, web
- Language: Java
- Homepage:
- Size: 2.96 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## 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](images/image05.jpg)
Arduino было подключено к usb-порту сервера, на котором работает само приложение. Здесь замысел был в том, что цикл,
описанный в скетче микроконтроллера:- каждые 10 секунд оправшивает датчик температуры;
- преобразует считанное напряжение с помощью библиотеки NTC в градусы, относительно модели датчика;
- полученное значение передает на COM-порт (на самом деле UART, который так же расположен на плате arduino).![image info](images/image06.jpg)
Затем, настроенный планировщик через определенные интервалы считывает данные с виртуального COM-порта. И, как и в случае
с первым датчиком,
сравнивает полученное значение с установленное в настройках критической отметкой. В случае превышения критических
отметок - приложение
отправляет команду на asterisk сервер через ssh, для оповещения. Затем статус оповещения датчика переводится в режим - "
выключен" на указанный в настройках
период (сейчас это 30 минут), чтобы избежать "спама" звонков. Через указанный интервал температура снова сравнивается и
если она, по прежнему, превышает допустимую, происходит повторный отправка команды оповещения.
Температура измеряется даже в моменты отключения оповещения, в этом случае, если она быстро снижается и становится ниже
критической на 5 градусов, то датчик досрочно переводится в режим оповещения "включен".За оповещение в этом проекте отвечает сервер asterisk 16 версии. Для этого был написан кастомный экстеншн для диалплана,
который отправлет вызов на указанный номер телефона и проигрывает указанный аудиофайл (который тоже, в свою очередь был
заранее сгенерирован и помещен в папку для кастомных аудиофайлов на сервере asterisk). Было принято решение использовать
команды через ssh-туннель, чтобы не тратить время на изучение глубин документации asterisk и его api.Рассматриваемый, в начале разработки проекта, вариант с gui был отброшен из-за неудобства использования и вынужденного
требования
разместить приложение на одном из серверов в серверном помещении без доступных датчиков. В итоге был разработан
простейший веб-интерфейс с использованием шаблонизатора thymeleaf. Для исключения нежелательного доступа посторонних лиц
был использован модуль spring security и несколько заготовленных, вложенных учетных записей для доступа к сервису.
Веб-интерфейс обеспечивает доступ к актуальной температуре в серверных
помещениях, архиву событий и настройкам приложения. В разделе настроек действует валидация введенных данных, для
исключения случае ввода некорректных данных.### Результаты
Поставленные задачи выполнены в полном объеме.
Развернутое приложение позволяет получать, по указанному ip-адресу - информацию о датчиках, событиях, изменять
настройки.![image info](images/image01.jpg)
![image info](images/image02.jpg)
![image info](images/image03.jpg)
![image info](images/image04.jpg)В автоматическом режиме совершать вызов по указанному телефонному
номеру и проигрывать аудиофайл, логгировать, хранить и выводить на веб-интерфейс происшедшие события (сюда входят
ежечасные показатели температуры, ошибки, предупреждения).