Хабрахабр

[Из песочницы] Сертифицированный мониторинг температуры

В нашей компании используется Система менеджмента качества (СМК). В рамках одной из сертификации по системе ISO:9001 было предписано собирать показания температуры и влажность в некоторых помещениях, например в серверной или на складах.

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

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

Дабы автоматизировать данную процедуру были начаты поиски устройства для сбора температуры и влажности.

(для СМК не обязателен заббикс, любое место хранения, но делать еще какую то отдельную систему под мониторинг температуры не хотелось). Цель была как то собирать данные и передавать все это в Zabbix.

все они не имеют сертификации, а точнее метрологической поверки, а следовательно и не могут считаться официальными средствами измерения и не подходят для прохождения ISO:9001. В принципе было много готовых комплектов для этого, например Equicom PING3 или netping и таких примеров еще куча, так же можно было собрать свою систему на arduino или raspeberry,
но все эти варианты не подходили т.к.

Им оказался «Ивит-М.Е.» разработанный в Новосибирске, там же и производящийся. В итоге был найден прибор умеющий отдавать данные по ethernet и входящий в реестр измерительных средств. срок изготовления около месяца, плюс поверка, плюс доставка до Москвы). Заказали (заказ кстати идет долго.

Когда берешь в руки сразу понимаешь что это российское производство 🙂 Приходит все это вот в таком виде.

Блок питания(заказывается отдельно) не подключен к датчику.

По этому разбираем его и начинаем подключать.

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

плюс и минус подписаны прям на плате. На выходе постоянный ток.

Согласно инструкции Дальше подключаем провода непосредственно к самому датчику.

Сами клеммы выглядят вот так:

Откручиваем, снимаем и из Г-образной половинки выковыриваем вкладыш.
Подключаем питание и сеть.

В итоге получается нечто такое:

Из минусов данного устройства — он не умеет отдавать данные по SNMP, работает по протоколу Modbus.

В принципе есть много SCADA систем и OPC серверов умеющих читать по Modbus, но большинство из них либо платные, либо собирают в какую то свою базу данных из которой тоже не понятно как вытаскивать данные для передачи их в дальнейшем заббиксу.

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

READ_INPUT_REGISTERS (16855, 57976)

Для конфигурирования датчика есть приложение config-ivit.exe

можно настроить сеть, почту. Настроек там не очень много.

в конфигураторе регистры указаны в 16речной системе, но в питоновском скрипте нужно указывать регистры в 10-тичной системе.

Приводим данные к нормальному читаемому виду согласно стандарту ieee-754.

Реализовать передачу данных полученных от скрипта в заббикс можно двумя путями.

У меня, например, был на самом заббикс сервере. Первый способ: с помощью userparametr, на какой-нибудь узел, где установлен питон и заббикс агент.

import modbus_tk.defines as cst
import modbus_tk.modbus_tcp as modbus_tcp
import sys def check_reg(reg,ip): reg = int(reg) master = modbus_tcp.TcpMaster(host=ip, port=int(502)) master.set_timeout(1.0) getDI = master.execute(1,cst.READ_INPUT_REGISTERS, reg, 2) Num1 = str(bin(getDI[0]))[2:] while len(Num1) < 16: Num1 = '0' + Num1 Num2 = str(bin(getDI[1]))[2:] while len(Num2) < 16: Num2 = '0' + Num2 res = Num1 + Num2 znak = int(res[0], 2) znak2 = (0 - 1) ** znak e = int(res[1:9], 2) - 127 exp = 2 ** e m = 1 + (int(res[9:], 2) / float(2 ** 23)) F = znak2 * exp * m print(round(F, 1)) check_reg(sys.argv[1],sys.argv[2])

Со стороны заббикса в zabbix_agentd.conf указываем:

UserParameter=check_reg[*], /usr/bin/python /home/appliance/scada.py $1 $2

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

168. например: check_reg[22,192. 100] 100.

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

22 — Влажность
34 — Температура
36 — Точка росы

Этот способ удобен тем, что можно создать отдельный узел сети у которого не будет агента, и соответственно можно будет сделать шаблон для многих устройств. Второй способ: передавать значения через zabbix_sender.

import modbus_tk.defines as cst
import modbus_tk.modbus_tcp as modbus_tcp
import sys, os def check_reg(reg,ip): reg = int(reg) master = modbus_tcp.TcpMaster(host=ip, port=int(502)) master.set_timeout(1.0) getDI = master.execute(1,cst.READ_INPUT_REGISTERS, reg, 2) Num1 = str(bin(getDI[0]))[2:] while len(Num1) < 16: Num1 = '0' + Num1 Num2 = str(bin(getDI[1]))[2:] while len(Num2) < 16: Num2 = '0' + Num2 res = Num1 + Num2 znak = int(res[0], 2) znak2 = (0 - 1) ** znak e = int(res[1:9], 2) - 127 exp = 2 ** e m = 1 + (int(res[9:], 2) / float(2 ** 23)) F = znak2 * exp * m return round(F, 1) os.system('zabbix_sender -z 127.0.0.1 -s Ivit1 -k Humidity -o '+ str(check_reg(22,sys.argv[1])))
os.system('zabbix_sender -z 127.0.0.1 -s Ivit1 -k Temper -o '+ str(check_reg(34,sys.argv[1])))
os.system('zabbix_sender -z 127.0.0.1 -s Ivit1 -k Rosa -o '+ str(check_reg(36,sys.argv[1])))

Дальше остается только запустить этот скрипт на выполнение по крону указав только лишь ip адрес устройства

*/1 * * * * /home/ivitsender.py 192.168.100.100

Дальше настраиваем тригеры которые для нас считаются критичными. минимальная/максимальная температура, влажность.

Таким образом мы получили сертифицированный мониторинг температуры, который подходит для прохождения СМК и ISO:9001 Вот и все.

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»