В данной статье я хочу поделиться опытом разработки системы мониторинга состояния аккумуляторных батарей (АКБ) в коммутационных шкафах(ШК). Так же перспективой реализации системы проактивной защиты локальной сети методом мультиагентного сегментирования.

Задача, следующая: знать фактическое состояние АКБ в реальном времени, а также вести учёт замеров в ШК. Так как применяются разные источники бесперебойного питания (ИБП) начиная от разновидностей APC Smart-UPS и оканчивая РИП задача усложняется. Поэтому решение было принято проводить тесты конкретно с АКБ. В перспективе использовать индивидуальный подход к каждому ИБП используя доступные интерфейсы источника. Но на данном этапе (демонстрационном) нужно кардинальное решение.

Итак, у нас есть развёрнутая и отлаженная система Zabbix 6.2: на Ubuntu с MySQL, Apache на борту и локальная сеть по всем шкафам. В каждом ШК есть контроллер МИРАДА, в документации которого была заявлена работа по SNMP протоколу, а также унифицированные порты 4-200 мА и 0-10 В + 4 выхода реле.

Для фиксации напряжения было принято решение использовать резисторный делитель. Номинальное напряжение цепи АКБ 24V было понижено до 10V для входа контроллера. Исходя из представленных ресурсов б��дет описана следующая реализация:

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

Имея параметры:

  1. - амплитуда падения напряжения

  2. -время работы ШК от АКБ

  3. -ток цепи (согласно документации на ШК)

На основе этих данных вычисляем фактическую ёмкость АКБ, а также фиксируем время работы ШК от АКБ. Всё это в автоматическом или ручном режиме с отображением на карте сети и сигнализацией при критическом состоянии АКБ, а также формирование отчётов, то есть получаем весь возможный и необходимый функционал системы 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А.ч.

Заключение

Мы получили универсальный, с перспективой развития инструмент мониторинга состояния аккумуляторных батарей в коммутационных шкафах периметра. Для более критической информационной инфраструктуры как ранее упоминалось требуется более индивидуальный подход. На данном этапе и имея текущие данные используя систему из зависимых триггеров, а также возможности работы с картой сети будет разработана более полная карта сети с необходимой сигнализацией и формированием отчётов. Про проактивную систему защиты локальной сети методом мультиагентного сегментирования будет во второй части.