В нашей компании используется Система менеджмента качества (СМК). В рамках одной из сертификации по системе 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

Комментарии (29)


  1. AntonSor
    05.10.2019 23:44

    Спасибо за идею. Надо будет попробовать сделать такой же, но с нормальными разъемами, встроенным блоком питания и SNMP. Раз, оказывается, есть такой большой рынок


    1. drWhy
      05.10.2019 23:56

      Кстати да. Учитывая, что подключать датчики скорее всего будут витой парой, странно, что производители датчиков не устанавливают разъёмы RJ45 — обжать коннектор на кабель при монтаже гораздо легче, чем распаивать всякие загогулистые разъёмы (или подключать к клемникам внутри корпуса датчика), да и результат лучше.


      1. walrus911 Автор
        06.10.2019 00:27

        Ага. Если питание ещё более менее расшивать. То этот угловой разъём для езернета просто ужас. В связи с тонкостью жил, то тут порвётся то там. Несколько раз пришлось переделывать. Могли бы и rj-45 смонтировать.


        1. zxosa
          06.10.2019 05:30

          Rg-45 не удобен при вибрации, довольно нежный, если его трогать. Этот надёжнее, хотя я бы предпочел прямой с гайкой, типа bnc


          1. saege5b
            06.10.2019 11:47

            G16/G20 визуально неплохи. Количество контактов 12+.
            ждём конца гарантии, что бы весь изврат с RJ45 на них попробовать перевести.


    1. ViktorVS
      06.10.2019 03:43

      О каком рынке речь? Если вы вносите изменения в конструктив/ПО, то это уже будет другое СИ, неутвержденного типа.


  1. texder
    06.10.2019 06:16

    Вы открыли прибор, поверка уже недействительна. Ну и а как же сертификация ПО?
    Если уж сертифицировать, то до конца (хотя это получится дорого и глупо ради сбора температуры). Проще рядом с гигрометром повесить на ардуино и иногда сверять показания.


    1. walrus911 Автор
      06.10.2019 09:18

      Во первых на фотке открытый блок питания. Во вторых не открыв прибор его не смонтируешь никуда на стену, т.к креплений внешних никаких не предусмотрено.


      1. inno
        06.10.2019 15:14

        блок питания внутри выглядит убого (фактически — защищенный сертифицированный корпус для китайского блока). Сам измеритель так же "уникален и высокотехнологичен"?


  1. serejk
    06.10.2019 07:59

    https://github.com/v-zhuravlev/libzbxmodbus — проверено, работает.


  1. ayrro
    06.10.2019 08:13

    А скорость аспирации от 0,5 до 1,5 м/с для ВИТ-1 чем обеспечивали? :)


    1. AntonSor
      06.10.2019 09:32
      +1

      Сертифицированным сквозняком (как обычно) :)


    1. DimanDimanyich
      06.10.2019 21:10

      хороший проверяющий может написать 5 замечаний по одному гигрометру.
      Интелектуальные датчики их почему-то не интересуют.


      1. drWhy
        06.10.2019 22:24

        Как и весы. Основное внимание — пломбе на корпусе. Тот факт, что просто оттарировав весы можно изменить их показания (не говоря уже о том, что можно залить модифицированную прошивку) не берётся во внимание. Зато потеря пломбы в результате мелкого местного ремонта — это ой.


  1. Serge78rus
    06.10.2019 11:47

    Вход подключаем все равно как. ток переменный.
    Вообще на Вашем фото, входы модуля, стоящего внутри источника питания, подписаны AC/L и AC/N, что как бы намекает, что может быть и не все равно. Ток то действительно переменный, но цепь линии и нейтрали внутри модуля может чем то и отличаться (например — защитой предохранителем, или еще чем). Если уж производитель нанес маркировку, то ее лучше соблюдать, а не строить предположения об обязательности ее соблюдения.


    1. alexxisr
      07.10.2019 05:56

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


      1. Serge78rus
        07.10.2019 11:12

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

        Если посмотреть документацию изготовителя модуля (на основе которого изготовлен источник), то мы увидим перечисление кучи стандартов безопасности и электромагнитной совместимости, которым он удовлетворяет (правда с оговоркой, что электромагнитная совместимость должна перепроверяться в составе конечного изделия). Так же мы увидим маркировку выводов первичной цепи AC/N и AC/L. Каким именно образом соблюсти правильную фазировку, при подключении к сети производитель модуля не упоминает — да это и не его заботы.

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

        Какому из этих документов, по Вашему мнению, стоит верить в той части, где их утверждения расходятся?


      1. walrus911 Автор
        07.10.2019 15:38

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


  1. ultral
    06.10.2019 14:35

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


    1. Javian
      06.10.2019 15:07

      А воду кто доливать будет? :)


      1. lorc
        06.10.2019 16:04

        Маленький перистальный насос, подключенный к сертифицированному водопроводу.


      1. drWhy
        06.10.2019 19:00

        Конденсат из кондиционера.


  1. crustal
    06.10.2019 19:43
    -1

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

    Неудобно? Баба Маша, пенсионерка на МРОТе, уборщица, за полминуты взяла и записала в журнал, может ей в кайф, можно было и поинтересоваться. Стоит чуть более, чем бесплатно. Все затраты — это поверка раз в два года за пару сотен рублей прибора ВИТ-1. Сотня на год.

    Теперь потратили кучу денег на прибор, кучу часов хорошо оплачиваемого времени (отнюдь не МРОТ) и поверка не раз в два года, а раз в год и не 200р, а побольше тысячи, то есть поверка в десять раз дороже и самое главное, что реально неудобно — была точность +-0.2 градуса, а стала примерно +-2 градуса, в десять раз хуже (по разным источникам — разная, но т.к. датчик, который там стоит уже давно не выпускается, то скорее всего +-2 градуса — правда) Прогресс, ёпт, вам, что реально не интересно знать температуру воздуха в помещении с вменяемой точностью?


    1. drWhy
      06.10.2019 20:48

      Периодичность поверки гигрометров зависит от области применения, 1-2 года.

      Кейс — продуктовый супермаркет. Закуплена система телеметрии в составе 16-ти датчиков, контроллера, компьютера и ПО. Поверка не нужна (учёт внутренний). Сначала собранные гирляндой на одном столе датчики влажности меряли кто врозь, кто по дрова, но потом, видимо подсохли и стали мерять довольно точно с разницей +-2%.
      Датчики расставлены на протяжении 300 м. по производственным цехам. Где-то влажность 99% (мясной цех после смены паром обрабатывают), где-то температура -20°C (зона приёмки товара с открытыми воротами зимой). В целом по зданию влажность занижена из-за гипервентиляции, что, кстати, плохо для торговли — усушка же. Всё работает, всё пишется, бабушки никуда не ходят. Интересно наблюдать на графиках синхронные колебания температуры/влажности в зависимости от времени суток/сезона/погоды/отопления. Бабушки замучились бы за такими графиками бегать.


  1. berber
    06.10.2019 19:51

    В СМК прописано, что регистрация параметров осуществляется в электронном виде? Или вы раз в период просто распечатываете?


  1. Louie
    06.10.2019 21:48

    Имхо, схема с ардуино была бы гибче. Ивит-М.RS -> Modbus->Arduino<-SNMP<-Zabbix. Если так сделать, то:
    1. Костылей будет гораздо меньше
    2. Все костыли будут в ардуине
    3. Эти костыли можно будет легко использовать для подключения других датчиков


    1. walrus911 Автор
      07.10.2019 15:34

      Ваш вариант вполне рабочий. Но Ардуино это удорожание системы(само устройство, разводка под еще одну розетку, дополнительные затраты на электричество) к тому же это еще одно дополнительное устройство в цепи что тоже усложняет схему.


      1. Louie
        07.10.2019 18:37

        Вы не поняли. Я предложил взять устройство без ethernet, т.е. не «Ивит-М.Е.», а «Ивит-М.RS». Оно на 2 тыс. руб. дешевле, так что удорожания не будет. Как не будет увеличения сложности схемы, монтажа и энергопотребления.
        Просто, вместо штатного модуля Modbus->ethernet будет стоять arduino.


  1. SergeyISP
    09.10.2019 09:48

    заказ кстати идет долго. срок изготовления около месяца, плюс поверка, плюс доставка до Москвы

    Плюс доставка с Китая.
    Блок питания ru.aliexpress.com/item/33040922486.html
    По самому прибору ситуация скорей всего аналогичная — готовый китайский модуль на нашей плате в нашем корпусе.