Артём Плетнёв

инженер-электрик, разработчик

Проверка XML. Schematron

Так или иначе все сервисы сталкиваются с задачами валидации. Часто они сводятся к простым и однотипным проверкам — заполнены ли все обязательные поля, верен ли формат телефонного номера, кредитной карты и пр. Но существуют проекты, в которых условия и правила проверок более разнообразные да и те временами требуют серьёзного пересмотра. Внесение же изменений или создание дополнительных правил валидации требует непростых согласований и привлечения внимания нескольких команд разработчиков, обновления документации.

Недавно мне довелось поучаствовать в проекте, особую роль в котором занимают функции форматно-логического контроля входящих документов. Как следствие, у меня появились некоторые варианты решения подобных задач. Одним из них я поделился в своей статье на Хабре.

Фото собранных мною НКУ

Какое-то время я работал инженером-конструктором и монтажником по сборке низковольтных комплектных устройств (НКУ). Недавно на глаза попались фото собранных мною электрощитов. Часть из них я решил закинуть в этот блог.

Месячный план-график-отчет ППР

Я уже делился формой годового план-графика ППР. На основе составленного годового графика формируется план работ на каждый месяц. Для удобства составления план-график-отчетов ППР на месяц, был создан Excel-файл.

Скриншот пустой Excel-формы месячного план-график-отчета ППР

Приводим в чувства Клипш

Являюсь счастливым обладателем портативной акустики Klipsch Heritage Groove. Однажды, по невыясненным причинам, колонка превратилась в кирпич. Она перестала включаться и никак не реагировала на подключение и отключение провода зарядки. Моей печали не было предела.

Решение нашлось неожиданно — сброс на заводские настройки! Для того чтобы это провернуть, необходимо удерживать кнопку включения более 25 секунд. Вуаля — акустика снова в строю!

Форма годового графика ППР

Хорошее введение в тему составления графиков планово-предупредительных ремонтов электрооборудования. Для собственных нужд я составил и не единожды использовал форму годового графика ППР в формате Excel.

Скриншот пустой Excel-формы годового графика ППР

EASTRON SDM220-Modbus

В свое время мне в руки попал однофазный счетчик электроэнергии EASTRON SDM220-Modbus. Тогда я решил составить карту регистров в формате, совместимом с Modbus Poll, и сделать шаблон для Zabbix.

Получившийся шаблон предполагает использование загружаемого модуля libzbxmodbus, который позволяет работать с различными вариациями протокола Modbus: TCP, RTU и «RTU over TCP».

На момент написания заметки нативный агент Zabbix без всяких модулей поддерживает Modbus TCP, RTU или ASCII, но не «RTU over TCP». Для такого сценария использования мной тоже был создан шаблон.

Опрос электросчетчика ПСЧ-3АРТ

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

Теперь же возникла необходимость в мониторинге счетчиков ПСЧ-3АРТ от ННПО им. М.В. Фрунзе, но подходящего ПО для их опроса, к сожалению, не нашлось. Пришлось написать скрипт, решающий такую задачу.

Отладка проводилась с помощью преобразователя RS-485 в Ethernet

Во время отладки скрипта возникли некоторые вопросы. Например, на фото выше дисплей счетчика содержит информацию о накопленной реактивной энергии по одному из тарифов, которая составляет 117240 кВар*ч. В это же время скрипт возвращает в десять раз меньшее значение — 11724,031 кВар*ч. Кроме того, все три фазы объединены перемычкой, но скрипт возвращает различные значения фазных напряжений.

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

Мониторинг доступности ip-камер

Столкнулся с проблемой, что камеры видеонаблюдения HIKVISION, которые питаются по PоE от коммутатора D-Link DGS-1210-10P, временами становятся недоступны. Восстановить работу камер помогает их перезагрузка по питанию.

В связи с этим появилась необходимость настроить мониторинг доступности камер и, при необходимости, их автоматическую перезагрузку. В качестве средства мониторинга я буду использовать Zabbix.

Стучимся по SNMP

DGS-1210-10P поддерживает протокол SNMP. Таким образом, существует возможность удаленного управления PoE на каждом порту коммутатора. С этого и начнем. Убедимся, что SNMP включен на коммутаторе и существует «SNMP Community» с правами чтения и записи.

Веб-интерфейс DGS-1210-10P

Теперь проверим, что на хосте с Zabbix установлены и корректно работают инструменты Net-SNMP, например, вызвав команду snmpwalk. Если PoE включен на каждом порту, то вывод snmpwalk должен выглядеть так:

pletnev@zabbixhost:~$ snmpwalk -c public -v 2c 10.90.90.90 1.3.6.1.4.1.171.10.76.12.22.1.1.3
iso.3.6.1.4.1.171.10.76.12.22.1.1.3.1.1 = INTEGER: 1
iso.3.6.1.4.1.171.10.76.12.22.1.1.3.1.2 = INTEGER: 1
iso.3.6.1.4.1.171.10.76.12.22.1.1.3.1.3 = INTEGER: 1
iso.3.6.1.4.1.171.10.76.12.22.1.1.3.1.4 = INTEGER: 1
iso.3.6.1.4.1.171.10.76.12.22.1.1.3.1.5 = INTEGER: 1
iso.3.6.1.4.1.171.10.76.12.22.1.1.3.1.6 = INTEGER: 1
iso.3.6.1.4.1.171.10.76.12.22.1.1.3.1.7 = INTEGER: 1
iso.3.6.1.4.1.171.10.76.12.22.1.1.3.1.8 = INTEGER: 1

В случае, если PoE на каком-то порту отключен, то вместо «INTEGER: 1» мы увидим «INTEGER: 2».

SNMP и PoE

Для дистанционной перезагрузки камер по питанию я написал bash-скрипт, принцип работы которого предельно прост. По SNMP он узнает, включено ли PoE на указанном порту, и отключает его, если это так. Затем, спустя пять секунд, скрипт снова включает PoE на этом порту.

Например, перезагрузка камеры, подключенной к восьмому порту коммутатора, выглядит так:

pletnev@zabbixhost:~$ ./dgs_portreset.sh 10.90.90.90 public 1.3.6.1.4.1.171.10.76.12.22.1.1.3.1.8
iso.3.6.1.4.1.171.10.76.12.22.1.1.3.1.8 = INTEGER: 2
iso.3.6.1.4.1.171.10.76.12.22.1.1.3.1.8 = INTEGER: 1

Настраиваем мониторинг

Переместим dgs_portreset.sh в /usr/lib/zabbix/externalscripts, а через веб-интерфейс Zabbix создадим скрипт PoE switch. Теперь добавим действие IPCam POE reset, которое выполнит PoE switch при поднятии триггера с тегом ipcam.

Создаем скрипт PoE switch и настраиваем действие IPCam POE reset

Доступность камер будем определять банальным пингом. Для удобства добавления камер я подготовил шаблон IPCAM_PING, который содержит все необходимые макросы. Элементы данных и триггеры IPCAM_PING наследует от стандартного шаблона ICMP Ping.

Шаблон IPCAM_PING для Zabbix 5.2.2

После импорта шаблона IPCAM_PING триггеру ICMP Ping: Unavailable by ICMP ping потребуется добавить тег ipcam.

Добавляем камеру в мониторинг

Чтобы начать мониторинг доступности камеры, необходимо создать узел сети с интерфейсом типа агент и IP-адресом видеокамеры. К узлу сети необходимо присоединить шаблон IPCAM_PING и заполнить значения макросов {$SWITCH_IP}, {$SNMP_COMMUNITY} и {$OID}. Значением последнего является SNMP OID запись состояния PoE конкретного порта коммутатора.

Камера с адресом 192.168.3.64, подключенная к 11 порту коммутатора DGS-1210-28P с адресом 10.90.90.60

Производительность

В процессе добавления видеокамер появились проблемы с производительностью: «Zabbix icmp pinger processes more than 75% busy». Решить проблему помогло увеличение значения параметра StartPingers.

Изменение StartPingers позволило снизить Utilization of icmp pinger data collector processes с 78 до 24%

Снизить нагрузку на сервер возможно и изменением частоты обновления элементов данных. По умолчанию этот интервал составляет одну минуту.

Заключение

Такой мониторинг сетевых камер я применял с несколькими моделями коммутаторов D-Link. Ниже используемые мной OID:

Однолинейные схемы и phpSLDt

В некоторых ситуациях выручает табличное представление однолинейных электрических схем. Такой формат описан в приложении А, Рисунок А.4 из ГОСТ 21.613-2014. Для своих практических целей я перенёс это представление в Excel и долгое время пользовался такими электронными таблицами.

Спустя некоторое время я написал phpSLDt. Это RESTful Web Service для работы с электрическими схемами групповых сетей. Сервис позволяет хранить и работать с табличным представлением однолинейных схем в формате JSON. Имеющиеся методы API описаны в спецификации OpenAPI, которая в формате YAML доступна на странице проекта. Там же размещены инструкции по установке. Для phpSLDt был разработан клиент.

Более подробно читайте в моей статье на Хабре.

Заворачиваем RS485 в LoRa

На Хабре появилась история о том, как с помощью преобразователя RS232/485 в LoRa я организовывал беспроводной канал связи для получения данных от электросчётчиков «Меркурий».

2022  
Ранее Ctrl + ↓