
В данной статье я хочу поделиться опытом разработки системы мониторинга состояния аккумуляторных батарей (АКБ) в коммутационных шкафах(ШК). Так же перспективой реализации системы проактивной защиты локальной сети методом мультиагентного сегментирования.
Задача, следующая: знать фактическое состояние АКБ в реальном времени, а также вести учёт замеров в ШК. Так как применяются разные источники бесперебойного питания (ИБП) начиная от разновидностей APC Smart-UPS и оканчивая РИП задача усложняется. Поэтому решение было принято проводить тесты конкретно с АКБ. В перспективе использовать индивидуальный подход к каждому ИБП используя доступные интерфейсы источника. Но на данном этапе (демонстрационном) нужно кардинальное решение.
Итак, у нас есть развёрнутая и отлаженная система Zabbix 6.2: на Ubuntu с MySQL, Apache на борту и локальная сеть по всем шкафам. В каждом ШК есть контроллер МИРАДА, в документации которого была заявлена работа по SNMP протоколу, а также унифицированные порты 4-200 мА и 0-10 В + 4 выхода реле.
Для фиксации напряжения было принято решение использовать резисторный делитель. Номинальное напряжение цепи АКБ 24V было понижено до 10V для входа контроллера. Исходя из представленных ресурсов б��дет описана следующая реализация:
Используя функционал Zabbix отправляется команда включения реле на контроллере которое отключает подачу стационарного электропитания на ИБП вынуждая его переключиться на работу от АКБ. Таким образом мы фиксируем показания падения напряжения и время работы ШК от АКБ. После того как произойдёт полный разряд АКБ, электропитание пропадёт и реле перейдёт в состояние выключено, и стационарное питание восстановиться. В перспективе возврат электропитания при минимальной отметке порога напряжения на АКБ, это будет возможно при индивидуальном подходе.
Имея параметры:
- амплитуда падения напряжения
-время работы ШК от АКБ
-ток цепи (согласно документации на ШК)
На основе этих данных вычисляем фактическую ёмкость АКБ, а также фиксируем время работы ШК от АКБ. Всё это в автоматическом или ручном режиме с отображением на карте сети и сигнализацией при критическом состоянии АКБ, а также формирование отчётов, то есть получаем весь возможный и необходимый функционал системы Zabbix. О том как это было, в этой статье.

Начнём по порядку.
Есть контроллер:
Контроллер «УМС-М»

С модулем расширения P21X3

У него на борту есть SNMPv1, хотелось бы использовать посовременней версию протокола и web интерфейс, но работаем с тем, что есть. Пропустим нюансы прошивки и настройки, так как производитель помогает решать эти вопросы и без него ни как.
Смотрим SNMP

Здесь нас интересует два входа и состояние реле
. Подключаем реле отключения 220V на сухой контакт контроллера в разрыв подачи напряжения на него командой:
snmpset -v 1 -c MIRADA $ip 1.3.6.1.4.1.41069.3.0.X.0.1.0 i D
где:
X = индекс выхода 0 ... 3
D = 0 - выключить выходное реле, 1 - включить
Проверяем реакцию и состояние запросом:
snmpget -v1 -c MIRADA $ip 1.3.6.1.4.1.41069.3.0.0.0.1.0
Получаем следующий ответ:

- контакт в режиме включено, а значит питание на реле идёт, и оно размыкает контакт подачи электропитания на ШК.

Как видно на фото, реле запитывается от потребительской сети и размыкается контактом контроллера, который при отправке команды замыкает цепь, питание подаётся на реле, которое размыкает подачу электропитания, при потери потребительской сети (т.е. АКБ разрядится) реле переходит в состояние разомкнуто, контроллер перезагружается и возвращает значение контакта по умолчанию разомкнуто. Это сделано для того, чтобы зафиксировать цикл разрядки и не потерять ШК.
Подключаем на унифицированный вход АКБ через резисторный делитель рассчитанный по формуле

Полученные данные формируем в таблицу, где сопоставляем показания разности напряжение при помощи лабораторного блока питания для дальнейшей интерпретации в системе показаний и формировании графика.
Напряжение АКБ | На вход контроллера | Показания контроллера |
24 | 9.6 | 1,530000 |
23,5 | 9.4 | 1,529000 |
23 | 9.2 | 1,528000 |
22,5 | 9 | 1,527000 |
Виден шаг сетки и понятен множитель.
Идём в Zabbix и делаем коннект с контроллером по протоколу SNMP используя агента и создаём узел сети.


Создаём элемент данных и проверяем полученные данные. Обращаемся к таблице сопоставления и устанавливаем пользовательский множитель в предобработке элемента данных на значение 20 для привычного отображения данных.


Собираем стендовый экземпляр, отправляем команду на реле и создав график на основе элемента данных

видим нисходящую падения напряжения.

Создаём триггер с названием РАЗРЯД для контроля состояния ИБП. То есть если напряжение падает значит пропало внешнее электропитание и ИБП работает от АКБ. О чём триггер и будет сигнализировать на самом ИБП. В данном примере использовался SKAT -V.24DC-18 исп. 5000.

Добавляем элемент на карту сети в виде триггера для индикации.

На данном этапе


А теперь начинаются танцы с бубном). Нужно запускать замер АКБ и при этом фиксировать окончание замера, но так как фиксация будет построена на основании состояния реле, которое мы узнаём по запросу SNMP триггер нам тут не поможет – постоянные пакеты в сети и триггер не сможет фиксировать и преобразовать время работы реле.
Решение – пишем скрипт на Bash который будет запускаться через функционал Zabbix поддерживая макросы данной системы. Что даёт нам универсальный инструмент для тестирования любого ШК используя один скрипт, возможность автоматизации и планирование замеров.


#!/bin/bash
start=$(date +%s)
ip=$1
snmpset -v 1 -c MIRADA $ip 1.3.6.1.4.1.41069.3.0.0.0.1.0 i 1
snmpget -v1 -c MIRADA $ip 1.3.6.1.4.1.41069.3.0.0.0.1.0 > /home/zabbix/$ip
w1=$(awk '{print $4}' /home/zabbix/$ip)
while [ $w1 -gt 0 ]
do
sleep 200
snmpget -v1 -c MIRADA $ip 1.3.6.1.4.1.41069.3.0.0.0.1.0 > /home/zabbix/$ip
w1=$(awk '{print $4}' /home/zabbix/$ip)
done
end=$(date +%s)
echo $end - $start | bc > /home/zabbix/TIME$ip
Благодаря макросу {HOST.CONN} передаём значение адреса переменной $ip в файл (при отсутствии создаётся) с названием в виде адреса тестируемого устройства. В этот файл записывается значение контакта контроллера и проверяется каждые 200 секунд пока $4 не поменяется на 0 т.е. реле вернётся в состояние отключено. Так же фиксируется время выполнения скрипта в файл TIME$ip в секундах.
В цикле while можно заменить запрос на значение унифицированного входа задав пороговое значение напряжения на АКБ перед отключением ИБП если нельзя допускать кратковременную потерю связи в виде перезагрузки оборудования. Элемент индивидуального подхода, о чём говорилось ранее.
Возвращаемся в Zabbix и в узле связи MIRADA создаём элемент данных, который читает файл, где фиксируется состояние реле:

Делаем предобработку чтобы получить значение 0 или 1.

Добавляем триггер на основе этого элемента данных

Теперь запуская скрипт:


Теперь необходимо сопоставить данные и построить систему сигнализации с информацией о состоянии АКБ. Для этого создадим локальный узел сети

Элемент данных, считывающий содержимое файла TIME в котором время отработки скрипта в секундах.

И привяжем к нему триггеры каждый из которых срабатывает в своём диапазоне значения:

И добавляем этот элемент на карту сети, замеры стендового ШК показывают среднее значение учитывая паузу в скрипте 200 секунд и округление времени работы от АКБ с погрешностью 20минут/0,2А.ч.
Заключение
Мы получили универсальный, с перспективой развития инструмент мониторинга состояния аккумуляторных батарей в коммутационных шкафах периметра. Для более критической информационной инфраструктуры как ранее упоминалось требуется более индивидуальный подход. На данном этапе и имея текущие данные используя систему из зависимых триггеров, а также возможности работы с картой сети будет разработана более полная карта сети с необходимой сигнализацией и формированием отчётов. Про проактивную систему защиты локальной сети методом мультиагентного сегментирования будет во второй части.