В нашей компании используется Система менеджмента качества (СМК). В рамках одной из сертификации по системе ISO:9001 было предписано собирать показания температуры и влажность в некоторых помещениях, например в серверной или на складах.
Т.к. все бюрократические процедуры требуют бумажек, то и сбор данных должен производиться устройством имеющим поверку.
В связи с этим был повешен самый обычный гигрометр и на протяжении нескольких лет люди ежедневно записывали показания в журнал. Согласитесь, неудобно.
Дабы автоматизировать данную процедуру были начаты поиски устройства для сбора температуры и влажности.
Цель была как то собирать данные и передавать все это в Zabbix. (для СМК не обязателен заббикс, любое место хранения, но делать еще какую то отдельную систему под мониторинг температуры не хотелось).
В принципе было много готовых комплектов для этого, например Equicom PING3 или netping и таких примеров еще куча, так же можно было собрать свою систему на arduino или raspeberry,
но все эти варианты не подходили т.к. все они не имеют сертификации, а точнее метрологической поверки, а следовательно и не могут считаться официальными средствами измерения и не подходят для прохождения ISO:9001.
В итоге был найден прибор умеющий отдавать данные по ethernet и входящий в реестр измерительных средств. Им оказался «Ивит-М.Е.» разработанный в Новосибирске, там же и производящийся. Заказали (заказ кстати идет долго. срок изготовления около месяца, плюс поверка, плюс доставка до Москвы).
Приходит все это вот в таком виде. Когда берешь в руки сразу понимаешь что это российское производство :-)
Блок питания(заказывается отдельно) не подключен к датчику.
По этому разбираем его и начинаем подключать.
Вход подключаем все равно как. ток переменный. я использовал обычный силовой кабель от компа.
На выходе постоянный ток. плюс и минус подписаны прям на плате.
Дальше подключаем провода непосредственно к самому датчику. Согласно инструкции
Сами клеммы выглядят вот так:
Откручиваем, снимаем и из Г-образной половинки выковыриваем вкладыш.
Подключаем питание и сеть.
В итоге получается нечто такое:
Из минусов данного устройства — он не умеет отдавать данные по SNMP, работает по протоколу Modbus.
В принципе есть много SCADA систем и OPC серверов умеющих читать по Modbus, но большинство из них либо платные, либо собирают в какую то свою базу данных из которой тоже не понятно как вытаскивать данные для передачи их в дальнейшем заббиксу.
По этому был написан небольшой скрипт на питоне для прямого обращения к датчику.
Данные в регистрах хранятся в виде float и приходят при обращении к ним вот в таком виде
Для конфигурирования датчика есть приложение config-ivit.exe
Настроек там не очень много. можно настроить сеть, почту.
в конфигураторе регистры указаны в 16речной системе, но в питоновском скрипте нужно указывать регистры в 10-тичной системе.
Приводим данные к нормальному читаемому виду согласно стандарту ieee-754.
Реализовать передачу данных полученных от скрипта в заббикс можно двумя путями.
Первый способ: с помощью userparametr, на какой-нибудь узел, где установлен питон и заббикс агент. У меня, например, был на самом заббикс сервере.
Со стороны заббикса в zabbix_agentd.conf указываем:
В самом заббиксе нам нужно будет передать только номер регистра и IP адрес устройства к кому мы хотим обратиться:
например:
Номера регистров:
22 — Влажность
34 — Температура
36 — Точка росы
Второй способ: передавать значения через zabbix_sender. Этот способ удобен тем, что можно создать отдельный узел сети у которого не будет агента, и соответственно можно будет сделать шаблон для многих устройств.
Дальше остается только запустить этот скрипт на выполнение по крону указав только лишь ip адрес устройства
Дальше настраиваем тригеры которые для нас считаются критичными. минимальная/максимальная температура, влажность.
Вот и все. Таким образом мы получили сертифицированный мониторинг температуры, который подходит для прохождения СМК и ISO:9001
Т.к. все бюрократические процедуры требуют бумажек, то и сбор данных должен производиться устройством имеющим поверку.
В связи с этим был повешен самый обычный гигрометр и на протяжении нескольких лет люди ежедневно записывали показания в журнал. Согласитесь, неудобно.
Дабы автоматизировать данную процедуру были начаты поиски устройства для сбора температуры и влажности.
Цель была как то собирать данные и передавать все это в Zabbix. (для СМК не обязателен заббикс, любое место хранения, но делать еще какую то отдельную систему под мониторинг температуры не хотелось).
В принципе было много готовых комплектов для этого, например Equicom PING3 или netping и таких примеров еще куча, так же можно было собрать свою систему на arduino или raspeberry,
но все эти варианты не подходили т.к. все они не имеют сертификации, а точнее метрологической поверки, а следовательно и не могут считаться официальными средствами измерения и не подходят для прохождения ISO:9001.
В итоге был найден прибор умеющий отдавать данные по 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 адрес устройства к кому мы хотим обратиться:
например:
check_reg[22,192.168.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